Cloudanix VulnDB

CVE-2025-23167

Medium · 6.5

CVSS

6.5

EPSS

0.5%

Published

May 19, 2025

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

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.

Chainable
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

  1. Identify Node.js 20 application reachable via an HTTP proxy or load balancer
  2. Craft request with header block terminated by \r\n\rX
  3. Smuggle a second request intended for the backend only
  4. 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