Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach endpoint decoding untrusted input
-
DeliverySend ~224 KB body with many distinct percent-encoded runs
-
ExploitTrailing %zz forces custom fallback decoder
-
ExecutionQuadratic per-run regex replacement loop executes
-
PersistNode.js event loop blocked ~20s
-
ImpactDenial of service for all clients
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The affected application must pass attacker-controlled input to decodeUriComponent() from decode-uri-component <=0.5.0, either directly or through a dependency such as query-string (e.g. query-string.parse()). The malformed input must contain many distinct percent-encoded runs and at least one sequence that native decodeURIComponent rejects (such as a trailing %zz) to force the customDecodeURIComponent fallback path. Full ~20-second impact requires delivering roughly 224 KB of such input, which is practical only where request bodies are decoded; exposure via URL query strings is throttled by Node's default 16 KB header limit to about 40 ms per request, substantially limiting impact. No authentication or user interaction is required (PR:N/UI:N). The only complete fix per the vendor is upgrading to 0.5.1. |
| Impact | This is a genuine but bounded availability risk, not a top-tier emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) with VA:H and all confidentiality/integrity metrics N confirms a network-reachable, unauthenticated denial-of-service with no data exposure; the AT:P (attack requirement) aligns with the advisory's statement that full impact requires a path that accepts large request-body input rather than URL-length-limited query strings. No EPSS score and no KEV listing were provided, so there is no signal of widespread or confirmed active exploitation; the vuln.today decision label is 'this_week', consistent with important-but-not-immediate prioritization. A proof-of-concept is published in the GHSA advisory demonstrating ~20 seconds of event-loop blocking from a single ~224 KB request. The practical severity hinges entirely on deployment: applications decoding untrusted request bodies (e.g. form bodies via query-string.parse()) are fully exposed, whereas inputs confined to URL query strings under Node's default 16 KB header limit degrade to roughly 40 ms per request - a far smaller impact. So the headline 8.2 is realistic only for body-decoding deployments; URL-only exposure is materially lower risk. No conflicting signals, but note EPSS/KEV data is simply absent rather than confirming low exploitation. |
| Exploit ScenarioDerived | An attacker sends a single unauthenticated HTTP request whose body contains tens of thousands of distinct malformed percent-encoded runs (about 224 KB) terminated by an invalid sequence such as %zz. An application that decodes that body with decodeUriComponent - directly or via a dependency like query-string - enters the quadratic fallback decoder, blocking Node's single event-loop thread for ~20 seconds and stalling all other clients. A working proof-of-concept is published in the GHSA advisory, though it is not verified as a packaged working exploit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Quadratic CPU consumption in the npm package decode-uri-component 0.5.0 and earlier lets unauthenticated remote attackers stall the Node.js event loop by supplying malformed percent-encoded input that contains many distinct encoded runs plus a single sequence the native decoder rejects, forcing a fallback path that runs one full-string regular-expression replacement per distinct run. A payload of roughly 224 KB blocks the process for about 20 seconds, but Node's default 16 KB header limit throttles URL-derived input to roughly 40 ms per request, so full impact requires an application that decodes request bodies, such as form bodies parsed with query-string.parse(). The flaw is fixed in 0.5.1, which replaces the replacement loop with a single-pass in-place decode; a public proof-of-concept snippet accompanies the vendor advisory, and it is not verified as working exploit code. Exploitation status: no confirmed active exploitation (not in CISA KEV).
RemediationAI
Upgrade decode-uri-component to 0.5.1, the version the vendor identifies as the fix (release tag v0.5.1, commit fad01d65b93bd3f2f0dc32dfd8d57a38b57bc608, which collapses the replacement loop into a single-pass input.replace(multiMatcher, run => decode(run)) so decoded output is never rescanned); the vendor treats updating as the only complete remedy, so downstream consumers such as query-string should be bumped to a release that depends on 0.5.1 and the lockfile audited to confirm no transitive copy below 0.5.1 remains. Until the upgrade lands, note what the advisory says about exposure differences rather than assuming uniform safety: input arriving through URL query strings is bounded to roughly 40 ms per request by Node's default 16 KB header limit, whereas applications that decode request bodies (form bodies parsed with query-string.parse() and similar) are fully exposed to the ~20-second stall, so capping request-body sizes and avoiding passing large untrusted bodies to decodeUriComponent() reduces but does not remove the delay. Advisory and patch details are at https://github.com/SamVerschueren/decode-uri-component/security/advisories/GHSA-qr28-fpjm-wq7f and https://github.com/SamVerschueren/decode-uri-component/releases/tag/v0.5.1; vulnerability.org classifies the item for action this week, which reflects a genuine but bounded availability risk rather than a top-tier emergency.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
decode-uri-component wraps and hardens the native JavaScript decodeURIComponent. When native decoding throws, index.js falls back to customDecodeURIComponent, which scans the input for every run of percent-encoded bytes (for example %C3%A5), stores each distinct run and its decoded value in a lookup table, then performs one input.replace(new RegExp(key, 'g'), …) call per table entry. With K distinct runs in an input of length L this costs K regex compilations and K full scans, i.e. O(K·L), and because the attacker controls both K and L and K grows with L, the result is quadratic in input size. This maps to CWE-400 (Uncontrolled Resource Consumption) and CWE-407 (Inefficient Algorithmic Complexity); the advisory titles it denial of service via quadratic replacement of percent-encoded runs. A single malformed sequence such as a trailing %zz anywhere in the input is enough to divert processing onto the fallback path. The preceding 0.5.0 release had replaced the recursive decode() routine with a linear scanner while fixing CVE-2026-45822, but left this replacement loop untouched, so 0.5.0 - the version that fixed the earlier CVE - remains affected. Because Node.js executes JavaScript on a single thread, one request that blocks the event loop also stalls every other client of the process. The impact is availability only: the CVSS 4.0 vector and the independent CVSS 3.1 assessment (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) both score no confidentiality or integrity effect, and the trigger requires nothing beyond delivering the crafted input to a call site.
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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Remote unauthenticated input triggers the flaw (AV:N/AC:L/PR:N/UI:N); impact is availability-only event-loop blocking with no confidentiality or integrity effect (C:N/I:N/A:H).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
decode-uri-component provides a more robust alternative to decodeURIComponent. Prior to 0.5.1, decodeUriComponent in index.js falls back to customDecodeURIComponent after native decoding throws, and the fallback collects every distinct percent-encoded run before performing a full-string regular-expression replacement for each entry. Malformed input containing many distinct runs can therefore make both the number of replacements and the scanned input length grow together, causing quadratic CPU consumption and blocking the Node.js event loop; request-body inputs can reach the demonstrated size, while ordinary URL header limits reduce the practical delay. This issue is fixed in version 0.5.1.
Technical POC Analysis
CWE-400 (Uncontrolled Resource Consumption), co-classified CWE-407 (Inefficient Algorithmic Complexity).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity vulnerability in the widely used npm package decode-uri-component (versions ≤0.5.0) allows unauthenticated attackers to cause severe CPU exhaustion, potentially stalling Node.js applications that process request bodies. While no active exploitation has been observed, the public proof-of-concept and broad dependency of this library on web frameworks mean that any service decoding user-supplied form data is at risk of denial-of-service, disrupting customer-facing services and internal operations.
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
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
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-112471
NVD
CVE.org
GitHub
Exploit-DB