Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted CBOR containing __proto__ map key
-
ExploitDecoder assigns key via bracket notation
-
ExecutionDecoded object prototype poisoned with attacker values
-
ImpactDownstream authorization/feature-flag lookup reads inherited data
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V3 - Web Frontend Security Prototype pollution prevention
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the consuming application (1) passes attacker-controlled/untrusted data to @stablelib/cbor's decode() (versions < 2.0.4), and (2) afterward reads values from the decoded object through normal prototype-chain lookup - or merges the decoded object into another object - to drive a security-sensitive decision such as an authorization check, feature flag, or configuration value. The specific trigger is a CBOR map key named '__proto__' (also 'constructor'/'prototype'), which the pre-patch bracket-assignment path routes to the prototype setter. Limiting factors: there is NO impact if the application uses strict own-property checks (Object.hasOwn / hasOwnProperty) and never relies on inherited values for security, or if decoded CBOR never comes from an untrusted source; the flaw is in a library, so the attack requirement (AT:P) depends entirely on this downstream usage pattern rather than on a default service configuration. |
| Impact | The input CVSS 4.0 base score is 8.9 (High) with AV:N/AC:L/AT:P/PR:N/UI:N and an integrity-only impact profile (VC:N, VI:H, and notably SI:H on the subsequent system, VA:N). The AV:N/PR:N/UI:N portion means an attacker needs no privileges or user interaction to deliver a crafted CBOR payload, which raises the raw score, but the AT:P (attack requirement present) metric is the critical qualifier: real impact only materializes when the consuming application both decodes untrusted CBOR and subsequently trusts normal prototype-chain property lookup (or merges the decoded object) for a security decision. No EPSS score, SSVC decision, or KEV entry is present in the supplied data, so exploitation probability and CISA-tracked active-exploitation status cannot be assessed - treat those as unknown rather than low. Working exploit/PoC code is publicly available in the GHSA advisory, so the barrier to weaponization against a vulnerable downstream pattern is low. Overall this is a genuine integrity/logic risk for any service that uses @stablelib/cbor on attacker-supplied input and relies on normal property lookup, but it is not a universally exploitable flaw - its impact is conditional on downstream usage (reflected by AT:P), not on the library itself. One inconsistency: the 'Information Disclosure' tag conflicts with the CVSS confidentiality metric VC:N and the prototype-pollution (integrity) nature of the flaw - verify the tag before treating this as a confidentiality issue. |
| Exploit ScenarioDerived | An application exposes an API or message channel that decodes attacker-supplied CBOR with @stablelib/cbor and later consults the decoded object (e.g. an authorization or feature-flag check) via ordinary property lookup. The attacker submits a CBOR map whose key is '__proto__' with value {isAdmin:true}; the decoder's bracket assignment invokes the prototype setter, so obj.isAdmin resolves to true through the poisoned prototype even though it is not an own property, yielding unauthorized privilege. A complete working PoC is published in the GHSA advisory, lowering the effort to reproduce. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
Prototype pollution in the npm package @stablelib/cbor (versions before 2.0.4) allows an attacker who supplies a CBOR payload to make decoder output inherit attacker-chosen properties, because a map key named "__proto__" is written via bracket assignment and reaches the JavaScript prototype setter instead of creating a normal data property. Applications that pass untrusted CBOR to decode() and then read properties through normal prototype lookup, or merge the decoded object into configuration, authorization or feature-flag state, can act on inherited attacker values - the upstream GHSA includes a working proof-of-concept, so publicly available exploit code exists, but there is no KEV listing and no confirmed active exploitation. Impact is conditional and integrity-only (no confidentiality or availability loss), and the independently assessed CVSS 3.1 vector AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:N rates it below the vendor-supplied 8.9 CVSS 4.0 score because exploitation depends on that specific downstream consumption pattern.
RemediationAI
Upgrade to @stablelib/cbor 2.0.4 or later (for example npm i @stablelib/cbor@2.0.4 or pin the exact fixed release), which adds explicit rejection of __proto__, constructor and prototype map keys via a "cbor: forbidden map key" error and switches the unique-map-key check from in to own-property semantics; note that the GHSA package table lists a fixed version of 2.0.3 while the advisory summary, the release tag and the CVE description state 2.0.4, so target 2.0.4 to be certain, and consult https://github.com/StableLib/stablelib/security/advisories/GHSA-w48f-fwg7-ww6p and the fix commit https://github.com/StableLib/stablelib/commit/0f153a63b7552a0e8721f640984113e419015026. If an immediate upgrade is not possible, apply specific compensating controls and accept their trade-offs: stop passing untrusted CBOR to the vulnerable decoder (treat such input as hostile until it has been re-encoded or validated by a fixed version); after every decode, recursively reject any object whose Object.getPrototypeOf(result) is not Object.prototype or null and pre-scan the raw CBOR text-string key bytes for __proto__, constructor and prototype before decoding, accepting that a blunt substring scan produces false positives when those strings appear as legitimate data values and that recursive prototype checks add per-decode overhead; and harden consumers so authorization, feature-flag and configuration code uses Object.hasOwn()/hasOwnProperty() plus Map or Object.create(null) containers instead of inherited lookup and naive deep merges, since inherited attacker values are invisible to own-property checks but reachable via obj.prop, for...in and prototype-walking merges. Note that this flaw replaces the prototype of the individual decoded object and does not pollute Object.prototype globally, so global prototype pollution response steps and broad credential rotation are not warranted; a deployment is only affected in practice if it decodes untrusted CBOR and makes security-sensitive decisions from inherited or merged properties.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
CBOR (Concise Binary Object Representation, RFC 8949) encodes maps as key/value pairs, and pre-patch @stablelib/cbor built map results as plain JavaScript objects ({}) and stored each decoded key with bracket assignment (result[key] = value). That is safe for ordinary strings but not for the special property name __proto__: on a normal object, obj["__proto__"] = {...} does not create an own data property, it invokes the inherited Object.prototype.__proto__ setter and replaces the object's [[Prototype]] with the supplied object. Because the nested CBOR map in the advisory PoC ({ isAdmin: true }) decodes to a JavaScript object, the setter fires and the resulting object carries attacker-controlled data in its prototype chain: Object.hasOwn(obj, "isAdmin") is false while obj.isAdmin and Object.getPrototypeOf(obj).isAdmin are both true, and inherited properties also surface through for...in enumeration and prototype-walking merges. This is CWE-1321 (improperly controlled modification of object prototype attributes, i.e., prototype pollution). The same map path previously used key in result for its uniqueMapKeys duplicate check, which also consults the prototype chain, so duplicate detection could be influenced by inherited names. The fix commit 0f153a63b7552a0e8721f640984113e419015026 (packages/cbor/cbor.ts, with regression tests in cbor.test.ts) replaces that with Object.prototype.hasOwnProperty.call(result, key) and throws "cbor: forbidden map key" for __proto__, constructor and prototype in both definite-length and indefinite-length map decoding. No CPE identifiers were provided in the source data; the affected component is identified as npm/@stablelib/cbor in the GHSA advisory.
Know when Prototype Pollution gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
Attacker supplies crafted CBOR with no privileges or interaction (AV:N/PR:N/UI:N); impact needs the app to trust inherited properties (AC:H), crosses into application logic (S:C), and is integrity-only (I:H, C:N/A:N).
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
StableLib is a stable library of useful TypeScript and JavaScript code. Prior to 2.0.4, the @stablelib/cbor CBOR map decoding path creates ordinary JavaScript objects and assigns attacker-controlled keys with bracket assignment. A map key named __proto__ invokes the inherited prototype setter instead of creating an ordinary own property, allowing the decoded object's prototype to contain attacker-controlled authorization or feature-flag values. Downstream code that trusts normal property lookup or merges the decoded object can therefore make security-sensitive decisions using inherited attacker data. This issue is fixed in version 2.0.4.
Technical POC Analysis
Evidence base: GHSA-w48f-fwg7-ww6p (StableLib/stablelib) plus the advisory's embedded PoC.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
The @stablelib/cbor npm package, used for decoding CBOR data in Node.js applications, contains a prototype pollution vulnerability (CVE-2026-106448) that could allow unauthenticated attackers to manipulate application configuration, authorization logic, or feature flags when untrusted CBOR is processed. While no active exploitation has been confirmed, publicly available exploit code exists, and a vendor patch is not yet available. Organizations using this library in services that handle untrusted CBOR should prioritize mitigation to prevent integrity compromise.
No vendor-released patch identified at time of analysis. Interim mitigations: reject CBOR payloads containing keys named '__proto__' before decoding; use Object.create(null) to create prototype-less objects for decoded data; avoid merging decoded CBOR into configuration, authorization, or feature-flag state without strict validation; disable or restrict CBOR decoding of untrusted input if not essential; monitor for unexpected property inheritance or configuration changes.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Prototype Pollution
View allPrototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu
All versions of package dojo are vulnerable to Prototype Pollution via the setObject function. Rated critical severity (
Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau
The package handlebars before 4.7.7 are vulnerable to Prototype Pollution when selecting certain compiling options to co
This affects the package ini before 1.3.6. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitabl
Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service
A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi
A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function
All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s
This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr
Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser
alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde
EUVD-2026-93973
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB