<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Yayson (&lt;= 4.2.0) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/yayson--4.2.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Sat, 12 Sep 2026 00:56:54 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/yayson--4.2.0/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Prototype Pollution in yayson Store and LegacyStore</title><link>https://feed.craftedsignal.io/briefs/2026-09-yayson-prototype-pollution/</link><pubDate>Sat, 12 Sep 2026 00:56:54 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-09-yayson-prototype-pollution/</guid><description>The yayson library (&lt;= 4.2.0) is vulnerable to prototype pollution when deserializing malicious JSON:API documents, allowing unauthenticated attackers to corrupt the global Object.prototype and potentially achieve RCE via gadget chains.</description><content:encoded><![CDATA[<p>The <code>yayson</code> library for Node.js contains a critical prototype pollution vulnerability in its <code>Store</code> and <code>LegacyStore</code> components, tracked as CVE-2026-61534. The library uses incoming JSON:API document fields, specifically <code>type</code> and relationship names, as keys for internal lookup tables without proper sanitization. Because these tables are initialized as plain JavaScript objects, an attacker can supply a document where the <code>type</code> field is set to <code>__proto__</code>.</p>
<p>This operation writes directly onto the <code>Object.prototype</code>, affecting every object within the Node.js process lifetime. The vulnerability is highly impactful as it enables logic corruption or denial of service by design. Furthermore, if the host application contains suitable gadget chains, this pollution can be escalated to arbitrary code execution or authorization bypass. The vulnerability persists even when using <code>included</code> resources or custom type mappings, making it difficult to mitigate through standard input validation if the application relies on deeply nested data structures.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker crafts a malicious JSON:API document containing a <code>data</code> object with <code>type</code> set to <code>__proto__</code>.</li>
<li>The target application receives the document via a network request and passes it to the <code>yayson</code> <code>Store.sync()</code> or <code>LegacyStore</code> deserialization method.</li>
<li><code>yayson</code> parses the JSON:API object and processes the <code>type</code> string as a property key for the internal <code>models</code> lookup table.</li>
<li>The library performs an assignment operation: <code>models[&quot;__proto__&quot;][id] = model</code>, which effectively injects properties into the global <code>Object.prototype</code> because <code>__proto__</code> references the prototype of the <code>models</code> object.</li>
<li>The attacker includes malicious payloads within the <code>attributes</code> or <code>id</code> fields of the JSON:API document, which are then persisted globally across the process.</li>
<li>The application performs subsequent object operations that trigger the injected malicious properties, leading to code logic alterations or unauthorized state changes.</li>
<li>The attacker leverages existing gadget chains in the application environment to execute arbitrary code or bypass security controls based on the polluted prototype properties.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability allows an unauthenticated attacker to permanently alter the behavior of the Node.js application process. Successful exploitation leads to process-wide logic corruption and denial of service. Depending on the downstream application code, the impact can extend to authorization bypass or full remote code execution. This affects all users of <code>yayson</code> versions 3.x and 4.x up to and including 4.2.0.</p>
<h2 id="recommendation">Recommendation</h2>
<p>Prioritized actions for engineering teams:</p>
<ul>
<li>Update the <code>yayson</code> library to version 4.3.0 or later to include null-prototype lookup table implementations.</li>
<li>Implement a temporary mitigation by rejecting incoming JSON documents where <code>type</code> or relationship names are set to <code>__proto__</code>, <code>constructor</code>, or <code>prototype</code>.</li>
<li>Execute Node.js processes with the <code>--disable-proto=throw</code> flag to prevent prototype access if the environment permits.</li>
<li>Audit applications using <code>yayson</code> to identify usage of deep object merging or deserialization of untrusted user-supplied JSON:API payloads.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>prototype-pollution</category><category>deserialization</category><category>remote-code-execution</category><category>nodejs</category></item></channel></rss>