Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend request with many headers exceeding maxHeadersCount
-
DeliveryContent-Length hidden from proxy userland
-
ExploitProxy rebuilds outbound headers without Content-Length
-
ExecutionProxy pipes body to reused backend connection
-
PersistBackend misparses stream boundary
-
ImpactSmuggled prefix interpreted as new request
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service HTTP request consistency
|
| Exploitation Conditions | Exploitation requires all of the following conditions simultaneously: (1) a Node.js process acting as an HTTP forwarding proxy, not merely an application server; (2) the proxy must rebuild outbound request headers from IncomingMessage properties (req.headers, req.rawHeaders, or req.headersDistinct) rather than forwarding raw socket bytes; (3) the proxy must pipe the request body to a reused (keep-alive) persistent backend connection; and (4) the attacker must be able to send a request with enough headers to push Content-Length beyond the maxHeadersCount or maxHeaderPairs limit. Direct Node.js application servers that do not forward to a backend, and proxies that tunnel raw bytes without rebuilding headers (e.g., CONNECT tunnels), are not affected. The CVSS PR:N indicates no authentication is required to send the crafted request to the proxy, but the proxy must be internet-accessible or reachable by the attacker. |
| Impact | Real-world risk is low to moderate and highly architectural. The CVSS 3.7 Low score with AC:H correctly captures that exploitation requires a non-trivial setup: the vulnerable pattern only manifests in Node.js-based HTTP forwarding proxies that both (a) reconstruct outbound headers from IncomingMessage and (b) reuse persistent backend connections. Standard reverse proxies such as nginx or HAProxy in front of Node.js are unaffected; only those built with Node.js itself as the forwarding layer are vulnerable. No EPSS data was provided with this advisory, and no KEV entry exists, suggesting no observed mass exploitation. No public exploit code has been identified. Despite the low score, organizations running Node.js-based API gateways or service-mesh components should audit their proxy code for the vulnerable pattern - even a mid-tier platform team operating a shared internal gateway should treat this as a configuration audit task rather than an emergency patch. The CVSS integrity impact (I:L / S:U) likely understates the potential since successful request smuggling can lead to request hijacking, cache poisoning, or cross-tenant data exposure depending on backend behavior, arguments for S:C. |
| Exploit ScenarioDerived | An attacker sends a crafted HTTP request with a large number of headers to a Node.js-based forwarding proxy, pushing Content-Length past the maxHeadersCount limit so it is invisible to the proxy's header reconstruction logic. The proxy forwards the request to a reused backend connection without a Content-Length header, but the body bytes are still delivered according to the hidden Content-Length, causing the backend to interpret the leftover bytes as the start of a new request. No public exploit code exists; successful exploitation requires knowledge of the target proxy's architecture and backend connection reuse behavior. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
HTTP request smuggling in Node.js's HTTP client module enables forwarding proxies to desynchronize backend connections when request headers exceed the maxHeadersCount or maxHeaderPairs thresholds. When a Node.js-based proxy rebuilds outbound request headers from the visible IncomingMessage properties and pipes the original body over a reused backend connection, framing-critical headers such as Content-Length are silently omitted from the proxy's outbound request while still governing body delivery internally - causing the backend to misparse the request stream. No public exploit has been identified at time of analysis, and exploitation is constrained to specific proxy architectures, which is reflected in the CVSS 3.7 Low score.
RemediationAI
No vendor-released patched version has been identified at time of analysis. The primary mitigation is architectural: audit all Node.js-based HTTP forwarding proxy code and ensure that outbound headers to backend servers are constructed from the raw socket stream rather than from the truncated IncomingMessage header properties. Specifically, if the proxy pipes req body bytes directly to a reused backend socket, it must either forward the raw unparsed headers or set a sufficiently high maxHeadersCount/maxHeaderPairs value to prevent truncation of framing-critical headers. A practical compensating control is to set maxHeadersCount to a value high enough that Content-Length is never silently dropped (or set it to 0 to disable the limit), accepting the trade-off of unbounded memory use for very large header sets. Alternatively, disabling connection reuse (keep-alive) on the backend connection eliminates the desync risk at the cost of increased connection overhead. Monitor the HackerOne report at https://hackerone.com/reports/3564941 and the Node.js security advisories for a patched release.
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
CWE-444 (Inconsistent Interpretation of HTTP Requests / HTTP Request Smuggling) is the root cause class. Node.js's HTTP parser exposes received headers to userland through IncomingMessage properties (req.headers, req.rawHeaders, req.headersDistinct), but silently truncates any headers beyond the configurable maxHeadersCount or maxHeaderPairs limits. Critically, the parser continues to use those truncated headers internally for HTTP message framing - including Content-Length, which determines how many bytes constitute the request body. When a forwarding proxy built on Node.js reads req.headers to reconstruct the outbound request to a backend server and then pipes the incoming socket body to a reused keep-alive connection, the backend receives a request with a body framed by a Content-Length the proxy never forwarded. This creates the classic Content-Length desynchronization primitive underlying CL.TE- and CL.CL-style HTTP request smuggling. The affected CPE is cpe:2.3:a:nodejs:node:*:*:*:*:*:*:*:*, covering all active release lines: Node.js 22, 24, and 26.
Know when Node 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:L/A:N
Scope changes to the backend server (S:C) and both confidentiality and integrity are at risk from smuggled requests; AC:H reflects the specific proxy architecture required.
Primary rating from Vendor (hackerone).
CVSS VectorVendor: hackerone
DescriptionCVE.org
A flaw in Node.js HTTP client can cause a request desynchronization for Node.js-based forwarding proxies that rebuild outbound headers from the visible IncomingMessage headers while piping the original body to a reused backend connection.
Node.js can omit headers beyond maxHeadersCount / maxHeaderPairs from req.headers, req.rawHeaders, and req.headersDistinct, while still using those omitted headers internally for HTTP message framing. In particular, Content-Length can be hidden from userland while the request body is still delivered.
This vulnerability affects all supported release lines: Node.js 22, Node.js 24, and Node.js 26.
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
HTTP request smuggling exploits inconsistencies in how front-end and back-end servers parse HTTP message boundaries.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
A stack overflow flaw was found in the Linux kernel's TIPC protocol functionality in the way a user sends a packet with
Uncaught TypeError in Node.js HTTP server crashes applications when clients send specially crafted `__proto__` headers a
Node.js Permission Model bypass in FileHandle.chmod() and FileHandle.chown() promise-based methods allows local authenti
Denial of service in Node.js url.format() function allows authenticated remote attackers to crash Node.js processes by s
Denial of service in Node.js 20.x, 22.x, 24.x, and 25.x via predictable hash collisions in V8's string hashing mechanism
Node.js versions 20.x, 22.x, 24.x, and 25.x use non-constant-time comparison for HMAC signature verification, allowing r
Memory leak in Node.js HTTP/2 servers allows remote unauthenticated attackers to exhaust server memory by sending crafte
Unix Domain Socket operations in Node.js 25.x bypass permission model enforcement, allowing local processes to create IP
Node.js Permission Model enforcement in versions 20.x, 22.x, 24.x, and 25.x fails to validate read permissions for fs.re
EUVD-2026-68923
GHSA-44cw-v76j-7fvv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB