
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-61534 is a prototype pollution vulnerability in the Store and LegacyStore components of the yayson npm package, a JSON:API document deserializer. By supplying a JSON:API document with type: "__proto__", an unauthenticated remote attacker can write arbitrary properties onto Object.prototype, corrupting every object in the Node.js process. All versions up to and including 4.2.0 (covering all 3.x and 4.x releases) are affected; version 4.3.0 contains the fix. The vulnerability carries a CVSS v3.1 base score of 9.1 (Critical) (GitHub Advisory, Confetti Advisory).
The root cause is CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes — Prototype Pollution). Store and LegacyStore use plain JavaScript objects as internal lookup tables keyed by the type, id, and relationship names parsed from a JSON:API document. Because type is used directly as an object key without sanitization, setting type to "__proto__" causes the assignment models["__proto__"][id] = model to write onto Object.prototype rather than a normal property. The attacker fully controls both the polluted key (id) and the polluted value (the model object, populated from attributes). The pollution persists for the entire process lifetime and can also be triggered via included resources in a relationship, bypassing any data.type allow-list; LegacyStore is additionally reachable when a configured types mapping resolves to "__proto__" (GitHub Advisory, Confetti Advisory).
Successful exploitation guarantees process-wide denial of service and logic corruption, as every object in the Node.js runtime inherits the attacker-injected properties from Object.prototype. Depending on the gadgets present in the consuming application, the impact can escalate to authorization bypass (e.g., security checks that rely on prototype-inherited properties) or remote code execution. Confidentiality impact is rated None in isolation, but integrity and availability are both rated High, reflecting the ability to corrupt application state and crash or destabilize the service (GitHub Advisory).
A public proof-of-concept is included in the official advisory and requires only a single Store.sync() call with a crafted JSON:API payload — no authentication, privileges, or user interaction are needed (Confetti Advisory). As of the advisory publication date (September 11, 2026), there is no evidence of in-the-wild exploitation or threat actor attribution. The CVE status is listed as "Reserved" and no EPSS score or CISA KEV catalog entry has been reported (GitHub Advisory).
yayson npm package (version ≤ 4.2.0) and exposes an endpoint that accepts and deserializes JSON:API documents via Store.sync() or LegacyStore.sync().type set to "__proto__", an attacker-controlled id, and arbitrary attributes containing the properties to inject into Object.prototype:{
"data": {
"type": "__proto__",
"id": "polluted",
"attributes": { "isAdmin": true }
}
}Content-Type: application/vnd.api+json).Store.sync() on the received document; models["__proto__"]["polluted"] writes { isAdmin: true, id: "polluted" } onto Object.prototype, affecting every subsequently created object in the process.if (user.isAdmin)), cause logic errors, or trigger a crash for DoS. For RCE, identify application-specific gadgets that use prototype-inherited properties in dangerous operations (e.g., child_process.exec, template engines) (GitHub Advisory, Confetti Advisory).Content-Type: application/vnd.api+json (or similar) containing "type": "__proto__" or "type": "constructor" or "type": "prototype" in the JSON body; similar patterns in included arrays within JSON:API payloads.Object.prototype or unexpected property inheritance.Upgrade yayson to version 4.3.0, which fixes the issue by using null-prototype lookup tables, rejecting __proto__, constructor, and prototype as document-derived member names, switching to Object.keys() iteration, and normalizing caller-supplied caches. As an immediate workaround without upgrading, reject any incoming JSON:API documents whose type or relationship names equal __proto__, constructor, or prototype at the application layer before passing them to Store.sync(). Alternatively, run Node.js with the --disable-proto=throw flag to prevent prototype chain manipulation at the runtime level (Confetti Advisory, GitHub Advisory).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."