Skip to main content

StableLib CBOR CVE-2026-106447

| EUVDEUVD-2026-93971 HIGH
Uncontrolled Recursion (CWE-674)
2026-10-06 security-advisories@github.com
8.7
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Send crafted deeply-nested CBOR payload
  2. Exploit
    Trigger unbounded recursion in _decodeValue()
  3. Impact
    Exhaust JavaScript call stack, crash worker/process

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
Exploitation Conditions

Exploitation requires that the target application decode attacker-controlled CBOR input using the @stablelib/cbor decoder in a version prior to the fix (which before 2.0.4/2.0.3 enforced no maximum nesting depth and had no iterative fallback). The concrete trigger is a payload with deeply nested CBOR arrays, maps, or tagged values (the PoC uses depth 12000). The practical limiting factor for impact is error handling: the raised RangeError/decoding exception only escalates to denial of service where the uncaught exception is allowed to terminate the request worker or process - services that wrap decode() in a try/catch degrade to a failed request rather than a crash. No authentication, no user interaction, and no non-default configuration are needed, since the pre-patch default imposed no depth limit.

Impact

The CVSS 4.0 base score of 8.7 (HIGH) is driven entirely by availability impact (VA:H) with a clean network-reachable, low-complexity, unauthenticated, no-interaction vector (AV:N/AC:L/AT:N/PR:N/UI:N); confidentiality and integrity impact are explicitly none (VC:N/VI:N), so this is a pure denial-of-service flaw (CWE-674, uncontrolled recursion). The input Tag 'Information Disclosure' directly contradicts the CVSS impact metrics and the advisory text - this is NOT an information-disclosure issue, and that tag should be disregarded. A working proof-of-concept is embedded in the GHSA advisory (12,000 nested array headers plus a null leaf), so publicly available exploit code exists, but there is no CISA KEV listing and no EPSS score in the provided data, so there is no evidence of active or widespread exploitation at this time. Real-world risk is sharply conditioned by deployment: the flaw only matters where an application feeds attacker-controlled CBOR into this specific decoder AND an uncaught RangeError is allowed to terminate the worker/process. The headline 8.7 somewhat overstates practical priority for most environments because @stablelib/cbor is a niche library and the impact is a recoverable crash rather than code execution or data loss - treat it as a real but moderate-priority patch, higher for any service that decodes untrusted CBOR on a request path.

Exploit ScenarioDerived

An attacker identifies a network service that decodes client-supplied CBOR using @stablelib/cbor (e.g., an API accepting CBOR request bodies) and submits a single small payload consisting of thousands of nested array/map/tag headers terminated by a leaf value. The recursive _decodeValue() descent exhausts the JavaScript call stack, throwing RangeError: Maximum call stack size exceeded; if the host service does not catch the exception, the request worker or process crashes, denying service. A reliable PoC (depth 12000) is published in the GHSA advisory, requiring no authentication or user interaction.

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

Denial of service in the @stablelib/cbor decoder before version 2.0.4 (the GitHub advisory records the fix as 2.0.3) allows remote, unauthenticated attackers to exhaust the JavaScript call stack by submitting a CBOR payload composed of deeply nested arrays, maps, or tagged values, producing a RangeError during decoding that can terminate the worker or process handling the request. Because the pre-patch decoder imposed no nesting limit and had no iterative fallback, no non-default configuration, credentials, or user interaction are required - only that the application decode attacker-controlled CBOR. Public proof-of-concept code is included in the vendor advisory (a 12,000-level nested-array payload), and the flaw is scored HIGH (CVSS 4.0 base 8.7, assessed independently as CVSS 3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) with impact confined entirely to availability, since confidentiality and integrity are explicitly unaffected. Exploitation escalates to a real outage only where the thrown exception is left uncaught and allowed to kill the request worker or process; services that wrap decode() in try/catch degrade to a single failed request. There is no indication of confirmed active exploitation (not in CISA KEV).

RemediationAI

Upgrade @stablelib/cbor to version 2.0.4 - the version named in the CVE and the published release tag - as the definitive fix (the GHSA text lists 2.0.3 as the fixed version, so treat 2.0.4 as the safe floor and confirm the resolved version in your lockfile). The patch enforces DecoderOptions.maxDepth with a default of 128; if your workloads legitimately use deeper nesting, tune maxDepth explicitly rather than leaving decoding unbounded, and lower it to the shallowest value your schema permits to shrink the attack surface. Application-side, wrap every decode() call in try/catch and handle CBORMaxDepthExceededError (a subclass of CBORDecodeError) as a client error - returning 400 and continuing - so a malicious payload yields a failed request instead of a crashed worker; without this handling the mitigated library still throws, only the stack exhaustion is prevented. Compensating controls where patching is delayed: cap request/body size at the HTTP or queue layer before invoking the decoder and reject payloads whose length exceeds the deepest legitimate message, accepting that this may block large but valid documents; for wrapped CBOR specifically, unscramble/decode the outer layer in a bounded way and re-encode to JSON if possible. Running the decode in an isolated worker or process with a supervisor that restarts on uncaught exceptions limits blast radius but adds latency and operational overhead, and is a containment measure, not a fix. Vendor advisory and patch references: https://github.com/StableLib/stablelib/security/advisories/GHSA-5jg4-p4qw-cgfr and https://github.com/StableLib/stablelib/commit/0149e18d9d4736e22c257744ca945ebce7899a01.

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

The flaw is an uncontrolled-recursion issue (CWE-674) in the @stablelib/cbor package, part of the StableLib TypeScript/JavaScript library. CBOR (Concise Binary Object Representation, RFC 8949) is a binary serialization format supporting nested arrays, maps, and tagged values; the decoder walks these structures by recursively descending a private _decodeValue() function, one stack frame per level of nesting. When the input nests thousands of levels deep (the advisory's PoC uses 12,000 nested array(1) headers terminated by a null), the recursion exceeds the engine's call-stack limit and V8 raises 'RangeError: Maximum call stack size exceeded'. The commit 0149e18d adds a DecoderOptions.maxDepth setting defaulting to 128, throws a new CBORMaxDepthExceededError when exceeded, and also refactors decoder failures into a typed error hierarchy (CBORDecodeError as base, plus CBORInvalidFormatError, CBORExtraDataError, CBORForbiddenKeyError, CBORDuplicateKeyError, CBORInvalidKeyTypeError) and adds opt-in strictMapKeys / uniqueMapKeys options - these are hardening/API changes rather than separate vulnerabilities. The root cause is simply the absence of any depth bound or iterative alternative in the recursive descent prior to the fix.

Know when npm 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.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Remote unauthenticated attacker sends a crafted CBOR payload with no interaction (AV:N/AC:L/PR:N/UI:N); only availability is affected via decoder crash (A:H), with no confidentiality or integrity impact and no scope change.

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
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.7

DescriptionCVE.org

StableLib is a stable library of useful TypeScript and JavaScript code. Prior to 2.0.4, the @stablelib/cbor decoder recursively processes nested CBOR arrays, maps, and tags through _decodeValue() without enforcing a maximum nesting depth. A sufficiently deep structure exhausts the JavaScript call stack, causing a decoding exception and potentially terminating an uncaught request worker or process. This issue is fixed in version 2.0.4.

Technical POC Analysis

CWE-674: Uncontrolled Recursion.

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 library, used in JavaScript applications for decoding CBOR data, is affected by a high-severity denial-of-service vulnerability that can crash worker processes or entire services. Unauthenticated attackers can exploit this remotely by sending deeply nested CBOR payloads, causing operational disruption for any organization that parses untrusted CBOR input. Publicly available exploit code exists, and a vendor patch is released in version 2.0.3, so leadership should prioritize immediate upgrade to prevent potential outages.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Low
niche TypeScript/JavaScript CBOR library, limited production adoption
Data Quality
5 sources
Confidence: Medium

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
Poc
System Exposure· derived
Open
Automatable
Yes
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

More in npm

View all
CVE-2021-43616 CRITICAL POC
9.8 Nov 13

The npm ci command in npm 7.x and 8.x through 8.1.3 proceeds with an installation even if dependency information in pack

CVE-2026-61568 CRITICAL POC
9.6 Sep 15

DNS rebinding against the local Streamable HTTP MCP listener in @zereight/mcp-gitlab before 2.1.30 lets a malicious web

CVE-2026-101894 CRITICAL POC
9.1 Sep 28

Archive extraction in the Node.js decompress package allows a crafted archive containing chained symlink entries to reso

CVE-2026-91127 HIGH POC
8.2 Sep 18

The legacy DOC renderer in File Viewer emits document-controlled hyperlink targets into generated HTML after character e

CVE-2026-102826 HIGH POC
8.1 Sep 29

Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command

CVE-2026-102281 HIGH POC
7.5 Sep 28

A remote, unauthenticated denial-of-service condition in the NestJS (Nest) microservices framework lets an attacker cras

CVE-2026-102278 HIGH POC
7.5 Sep 28

Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a

CVE-2026-102276 HIGH POC
7.5 Sep 28

Stack exhaustion in the npm library brace-expansion (all versions prior to 1.1.19, 2.1.5, 3.0.7, and 5.0.10) lets a craf

CVE-2026-101910 MEDIUM POC
6.9 Sep 28

The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat

CVE-2026-101912 MEDIUM POC
6.3 Sep 28

Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo

CVE-2026-101911 MEDIUM POC
6.3 Sep 28

Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or

CVE-2026-51996 CRITICAL
9.8 Sep 24

A credential-isolation flaw in geelen mcp-remote 0.1.16 through 0.1.38 allows a remote attacker who controls or can pred

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