Skip to main content

@stablelib/cbor CVE-2026-106448

| EUVDEUVD-2026-93973 HIGH
Improperly Controlled Modification of Object Prototype Attributes (Prototype Pollution) (CWE-1321)
2026-10-06 security-advisories@github.com
8.9
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply crafted CBOR containing __proto__ map key
  2. Exploit
    Decoder assigns key via bracket notation
  3. Execution
    Decoded object prototype poisoned with attacker values
  4. Impact
    Downstream 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

stablelib < 2.0.4

Affected Packages

npm @stablelib/cbor fix: 2.0.3
euvd stablelib fix: 2.0.4

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

Vendor (github) PRIMARY 8.9 HIGH
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
vuln.today AI 6.8 MEDIUM

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).

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
High
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 06, 2026 - 21:05 EUVD
CVE Published
Oct 06, 2026 - 20:17 cve.org
HIGH 8.9

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.4%
Top 68% exploitable
Prevalence
Low
niche CBOR codec within stablelib suite, limited npm adoption
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2026-34621 HIGH POC
8.6 Apr 11

Prototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu

CVE-2021-23450 CRITICAL POC
9.8 Dec 17

All versions of package dojo are vulnerable to Prototype Pollution via the setObject function. Rated critical severity (

CVE-2024-56059 CRITICAL
9.8 Dec 18

Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau

CVE-2021-23383 CRITICAL POC
9.8 May 04

The package handlebars before 4.7.7 are vulnerable to Prototype Pollution when selecting certain compiling options to co

CVE-2020-7788 CRITICAL POC
9.8 Dec 11

This affects the package ini before 1.3.6. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitabl

CVE-2020-28271 CRITICAL POC
9.8 Nov 12

Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service

CVE-2023-38894 CRITICAL POC
9.8 Aug 16

A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi

CVE-2024-24292 CRITICAL POC
9.8 Mar 28

A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function

CVE-2023-26121 CRITICAL POC
10.0 Apr 11

All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s

CVE-2021-23449 CRITICAL POC
10.0 Oct 18

This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr

CVE-2024-39011 CRITICAL POC
9.8 Jul 30

Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser

CVE-2024-38988 CRITICAL POC
9.8 Mar 28

alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy