Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen connection to streaming msgpack5 decoder
-
DeliverySend valid container header (large array/map)
-
ExploitDrip remaining bytes in tiny chunks
-
ExecutionForce repeated reparse of completed elements
-
PersistQuadratic CPU use blocks event loop
-
ImpactService-wide denial of service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
|
| Exploitation Conditions | Exploitation requires the application to use msgpack5's streaming Decoder (the decoder() stream / _transform path) and to feed it data from an untrusted remote peer who controls how the byte stream is fragmented into chunks. The limiting factors are significant: the attacker must be able to split a single valid MessagePack array or map container across many small chunks (hence CVSS AC:H), and applications that buffer each complete MessagePack value before decoding, or that decode only from trusted sources, are not exposed. Versions prior to 6.1.0 are affected; 6.1.0 preserves incremental container state so completed elements are not reparsed. Impact is limited to CPU exhaustion / event-loop blocking (availability) with no confidentiality or integrity effect. |
| Impact | This is a moderate-severity denial-of-service issue, and the signals are internally consistent rather than conflicting. The CVSS:3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H, base 5.9) correctly captures a remote, unauthenticated, availability-only impact (CWE-407, algorithmic complexity) with high attack complexity - the AC:H reflects that the attacker must control chunk fragmentation to trigger the quadratic reparse rather than any memory-corruption timing. No EPSS score, CISA KEV listing, or public POC was provided in the input, so exploitation status is 'no public exploit identified at time of analysis'. There is no SSVC decision data supplied. The realistic priority is lower than a typical CVSS 5.9 might suggest: impact is confined to CPU exhaustion / event-loop blocking (a availability hit, recoverable on connection close), there is no data exposure or code execution, and exploitation requires the application to specifically use the streaming decoder on attacker-controlled chunked input. The input Tag 'Information Disclosure' contradicts the vector (C:N, I:N) and the GHSA summary (a parsing DoS) - this appears to be a mislabeling, not a confidentiality concern. |
| Exploit ScenarioDerived | A Node.js service uses msgpack5's streaming decoder to parse MessagePack data arriving over a network socket from untrusted peers. A malicious peer sends one valid array or map container but delivers it one byte (or a few bytes) at a time, so each arriving chunk forces the decoder to reparse all previously completed elements from the beginning, producing quadratic CPU growth that pins the event loop and starves all other clients. No public exploit code was identified, but the technique is straightforward given AC:H only reflects the need to control chunk boundaries. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 08, 2026
Quadratic CPU consumption in the msgpack5 streaming decoder (versions prior to 6.1.0) lets a remote peer block the Node.js event loop by fragmenting a single valid MessagePack array or map across many small chunks. The decoder reparses the incomplete container from the beginning on every arriving chunk, so completed elements are decoded repeatedly and processing cost grows quadratically with the number of chunks. Exploitation requires the application to use the streaming Decoder path and accept untrusted, attacker-fragmented input - a condition rated high complexity (AC:H) - and the impact is limited to availability, with no confidentiality or integrity effect; no public exploit code was identified at time of analysis.
RemediationAI
Upgrade msgpack5 to version 6.1.0 or later - the vendor-released patch that preserves incremental container state so completed elements are never reparsed (fix commit e4827641d3105e295cbbd56e9c5389978547eab4; advisory GHSA-gcx5-hxj7-gpqq). Pinning the exact fixed version in package.json/package-lock.json (or an equivalent npm override / yarn resolution) is recommended since this is a transitive dependency risk. If an immediate upgrade is not possible, the vendor-documented workarounds are: buffer each complete MessagePack value before handing it to the decoder (eliminates incremental reparsing but adds memory overhead proportional to the largest message and requires an application-side framing protocol), or cap the number of chunks accepted for a single value so an attacker cannot accumulate enough fragments to reach quadratic cost (needs an explicit, enforced limit; overly tight limits may reject legitimately large messages). Decoding only from trusted peers, or restricting the endpoint that receives msgpack-framed input to authenticated/internal clients, also removes the remotely triggerable path. None of these workarounds repair the underlying algorithmic flaw, so patching to 6.1.0 remains the authoritative fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
msgpack5 is a MessagePack v5 implementation for Node.js and the browser. The flaw is CWE-407 (Inefficient Algorithmic Complexity): in vulnerable builds, the streaming decoder's _transform path called decode(this._chunks) with no retained state, so whenever a chunk arrived without completing an array or map container, the decoder restarted parsing the buffered prefix from byte zero. An attacker who controls chunk boundaries can therefore force repeated re-decoding of already-completed elements, producing O(n^2) work and starving the event loop. The fix (commit e4827641d3105e295cbbd56e9c5389978547eab4, released as 6.1.0) introduces an incremental decode state - a stack of container frames with type, length, itemCount and accumulated result - plus a decodeContainerHeader() helper, so tryDecodeIncremental() consumes container headers once and completeIncrementalValue() appends newly decoded elements to existing frames instead of reparsing them. The same commit also builds depth and maxArrayLength/maxMapLength checks into the incremental path, keeping bounded-recursion guarantees intact.
Know when Node.js 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
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Remote unauthenticated peer (AV:N/PR:N/UI:N) but must control chunk fragmentation to trigger quadratic reparse (AC:H); availability-only DoS, so C:N/I:N/A:H.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
msgpack5 is a msgpack v5 implementation for node.js and the browser. Prior to 6.1.0, the streaming decoder reparses an incomplete array or map from the beginning whenever another chunk arrives. A remote peer can split one valid MessagePack container across many small chunks, causing completed elements to be decoded repeatedly, producing quadratic CPU use and blocking the event loop. This issue is fixed in version 6.1.0.
Blast Radius
ecosystem impact- 294 npm packages depend on msgpack5 (61 direct, 235 indirect)
Ecosystem-wide dependent count for version 6.1.0.
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
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-95108
GHSA-gcx5-hxj7-gpqq
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB