Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend crafted deeply-nested CBOR payload
-
ExploitTrigger unbounded recursion in _decodeValue()
-
ImpactExhaust 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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
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
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
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.
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 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
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.
Apply vendor patch.
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
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
DNS rebinding against the local Streamable HTTP MCP listener in @zereight/mcp-gitlab before 2.1.30 lets a malicious web
Archive extraction in the Node.js decompress package allows a crafted archive containing chained symlink entries to reso
The legacy DOC renderer in File Viewer emits document-controlled hyperlink targets into generated HTML after character e
Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command
A remote, unauthenticated denial-of-service condition in the NestJS (Nest) microservices framework lets an attacker cras
Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a
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
The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat
Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo
Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or
A credential-isolation flaw in geelen mcp-remote 0.1.16 through 0.1.38 allows a remote attacker who controls or can pred
EUVD-2026-93971
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB