CVE-2025-23167
Medium · 6.5CVSS
6.5
EPSS
0.5%
Published
May 19, 2025
CISA due date
—
Cloudanix analysis
A bug in how certain web servers read incoming web requests lets attackers slip extra commands past security checks that are supposed to block them.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Privilege Gain
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw permits HTTP/1 header sequences terminated with \r\n\rX instead of the required \r\n\r\n, causing the llhttp parser in Node.js 20 to misinterpret request boundaries and enabling request smuggling across front-end proxies.
Why it matters to the business
Attackers can bypass proxy-enforced access controls to reach internal endpoints, potentially exposing sensitive data or performing unauthorized actions on affected Node.js 20 services; prevalence in Ubuntu 24.04 LTS environments increases exposure for organizations running Node.js workloads on those releases.
How an attack unfolds
An attacker sends a crafted HTTP/1 request containing an invalid header terminator (\r\n\rX) to a Node.js 20 backend behind a proxy; the inconsistent parsing allows the attacker to inject a second request that the proxy does not see, bypassing authentication or authorization checks.
How to fix it
Upgrade Node.js 20 installations to a build that includes llhttp version 9 or later; on Ubuntu 24.04 LTS apply the kernel package updates linux 6.8.0-50.51, linux-aws 6.8.0-1020.22, or linux-azure 6.8.0-1020.23 (or newer) that bundle the corrected Node.js runtime.
How to confirm the fix worked
Confirm llhttp version 9 or greater is present in the Node.js binary; re-test header parsing with both compliant (\r\n\r\n) and malformed (\r\n\rX) sequences to verify consistent request boundary handling.
Typical attack path
- Identify Node.js 20 application reachable via an HTTP proxy or load balancer
- Craft request with header block terminated by \r\n\rX
- Smuggle a second request intended for the backend only
- Bypass proxy rules to reach restricted endpoints or perform privileged actions
How to detect it
Review web server and proxy logs for requests containing non-standard header termination sequences; inspect Node.js process versions and llhttp library versions across the environment.
What your security team should do
- Prioritize patching all Node.js 20 instances to the fixed llhttp 9 build within the next 30 days given the public disclosure date
- Audit proxy configurations for any reliance on Node.js 20 HTTP parsing for access control decisions
- Add monitoring for anomalous request patterns that could indicate smuggling attempts
The record
A flaw in Node.js 20's HTTP parser allows improper termination of HTTP/1 headers using `\r\n\rX` instead of the required `\r\n\r\n`. This inconsistency enables request smuggling, allowing attackers to bypass proxy-based access controls and submit unauthorized requests. The issue was resolved by upgrading `llhttp` to version 9, which enforces correct header termination. Impact: * This vulnerability affects only Node.js 20.x users prior to the `llhttp` v9 upgrade.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Bitnami | node | 0 | 20.19.2 |
| Bitnami | node-min | 0 | 20.19.2 |
| Chainguard | nodejs-16 | 0 | 16.20.2-r15 |
| Chainguard | nodejs-16-doc | 0 | 16.20.2-r15 |
| Chainguard | nodejs-18 | 0 | 0 |
| Chainguard | nodejs-18-doc | 0 | 0 |
| Debian:12 | node-undici | 0 | No fix |
| Debian:13 | node-undici | 0 | No fix |
| Mageia:9 | nodejs | 0 | 22.16.0-1.mga9 |
| SUSE:Linux Enterprise Module for Web and Scripting 15 SP6 | nodejs20 | 0 | 20.19.2-150600.3.12.1 |
| Wolfi | nodejs-16 | 0 | 16.20.2-r15 |
| Wolfi | nodejs-16-doc | 0 | 16.20.2-r15 |
| Wolfi | nodejs-18 | 0 | 0 |
| Wolfi | nodejs-18-doc | 0 | 0 |
| openSUSE:Leap 15.6 | nodejs20 | 0 | 20.19.2-150600.3.12.1 |
Related vulnerabilities
- CVE-2025-59465 A malformed `HTTP/2 HEADERS` frame with oversized, invalid `HPACK` data can cause Node.js… Also affects node
- CVE-2025-59466 We have identified a bug in Node.js error handling where "Maximum call stack size… Also affects node
- CVE-2025-55132 A flaw in Node.js's permission model allows a file's access and modification timestamps… Also affects node
- CVE-2025-55131 A flaw in Node.js's buffer allocation logic can expose uninitialized memory when… Also affects node
- CVE-2025-55130 A flaw in Node.js’s Permissions model allows attackers to bypass `--allow-fs-read` and… Also affects node
- CVE-2025-59464 A memory leak in Node.js’s OpenSSL integration occurs when converting `X.509` certificate… Also affects node
- HSEC-2024-0003 process: command injection via argument list on Windows Also affects node
- CVE-2025-27210 An incomplete fix has been identified for CVE-2025-23084 in Node.js, specifically… Also affects node