CVE-2026-1527
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-1527 is a CRLF Injection vulnerability in the undici HTTP client library for Node.js, allowing attackers to inject arbitrary HTTP headers or smuggle raw data to non-HTTP backend services via the upgrade option of client.request(). It was published on March 12, 2026, and affects undici versions prior to 6.24.0 and versions 7.0.0 through 7.23.x. The vulnerability has a CVSS v3.1 base score of 4.6 (Moderate) per the GitHub Advisory Database, though the NVD assigns the same vector string (Github Advisory, Red Hat Bugzilla).

Technical details

The root cause is CWE-93 (Improper Neutralization of CRLF Sequences), where undici writes the user-supplied upgrade value directly to the raw socket without sanitizing for carriage return (\r) or line feed (\n) characters. Specifically, in lib/dispatcher/client-h1.js at line 1121, the code constructs the HTTP header string as `connection: upgrade\r\nupgrade: ${upgrade}\r\n` without any validation, allowing injected \r\n sequences to terminate the current header block and introduce arbitrary headers or raw protocol data. Exploitation requires that the application passes user-controlled input to the upgrade option, and user interaction is required per the CVSS scoring. The vulnerability is analogous to CVE-2023-23936 (GHSA-5r9g-qh6m-jxff), which affected the host header in the same library (Github Advisory, Github Advisory).

Impact

Successful exploitation allows an attacker with low privileges to inject arbitrary HTTP headers into outbound requests made by the vulnerable application, potentially manipulating server-side logic or bypassing security controls. More critically, by terminating the HTTP request prematurely via injected CRLF sequences, an attacker can smuggle raw protocol data to non-HTTP backend services such as Redis, Memcached, or Elasticsearch, enabling unauthorized command execution against those services. The confidentiality and integrity impacts are rated low (no availability impact), but the protocol-confusion attack surface against backend infrastructure represents a meaningful lateral movement risk in multi-tier architectures (Github Advisory, Red Hat Bugzilla).

Exploitability

There is no public proof-of-concept exploit and no evidence of in-the-wild exploitation as of the time of disclosure (Github Advisory). The vulnerability was reported via HackerOne (report #3487198) and is not listed in the CISA Known Exploited Vulnerabilities catalog. The EPSS score is approximately 0.012% (2nd percentile), indicating a very low near-term exploitation probability (Github Advisory). No threat actor attribution has been identified.

Exploitation steps

  1. Identify a vulnerable application: Find a Node.js application using undici versions < 6.24.0 or 7.0.0–7.23.x that passes user-controlled input to the upgrade option of client.request().
  2. Craft a malicious upgrade value: Prepare a payload containing CRLF sequences, e.g., WebSocket\r\nX-Injected-Header: malicious-value\r\n, to inject an arbitrary HTTP header.
  3. Trigger the request: Cause the application to invoke client.request({ upgrade: <malicious_input> }) with the crafted value — this may require user interaction depending on the application's flow.
  4. Inject headers or smuggle data: The injected \r\n sequences are written directly to the socket, terminating the upgrade header and inserting attacker-controlled content into the HTTP stream.
  5. Target backend services: To smuggle data to non-HTTP services (e.g., Redis), craft a payload that terminates the HTTP request and appends raw Redis commands (e.g., \r\nSET key value\r\n), exploiting the shared connection or proxy to reach the backend (Github Advisory).

Indicators of compromise

  • Network: Outbound HTTP requests from the Node.js application containing unexpected or duplicate headers (e.g., X-Injected-Header) in traffic captures; raw non-HTTP protocol commands (e.g., Redis SET/GET) appearing in TCP streams destined for backend services on ports 6379 (Redis), 11211 (Memcached), or 9200 (Elasticsearch).
  • Logs: Application logs showing unexpected upgrade header values containing encoded %0d%0a or literal \r\n sequences; backend service logs (Redis, Memcached, Elasticsearch) recording unexpected commands or queries not originating from known application logic.
  • Process/Application: Node.js application errors or stack traces related to HTTP parsing failures following unusual upgrade parameter inputs; anomalous data written to backend caches or search indices not attributable to normal application activity.

Mitigation and workarounds

Upgrade undici to version 6.24.0 (for the 6.x branch) or 7.24.0 (for the 7.x branch), which include fixes for this vulnerability (Github Advisory). As a workaround prior to upgrading, sanitize the upgrade option before passing it to client.request() by rejecting any value containing \r or \n characters:

function sanitizeUpgrade(value) {
  if (/[\r\n]/.test(value)) {
    throw new Error('Invalid upgrade value');
  }
  return value;
}
client.request({ upgrade: sanitizeUpgrade(userInput) });

Additionally, apply network segmentation to restrict application-layer access to backend services like Redis, Memcached, and Elasticsearch. Red Hat has addressed this in RHSA-2026:7350 (RHEL 9), RHSA-2026:7670 (RHEL 8), and RHSA-2026:7675 (RHEL 10) (Red Hat Bugzilla).

Community reactions

The advisory was published by maintainer mcollina on the nodejs/undici GitHub repository on March 12, 2026, with remediation credit to UlisesGascon (Github Advisory). IBM issued multiple security bulletins acknowledging the impact on products including IBM API Connect, IBM Cloud Pak for Integration, IBM QRadar Suite Software, IBM watsonx Orchestrate, and others, reflecting broad downstream exposure in enterprise environments (IBM API Connect, IBM Cloud Pak). Community reaction has been measured given the moderate severity and lack of active exploitation.

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

node-undici

Fixed

sid

node-undici: 7.24.5+dfsg+~cs3.2.0-1

Fixed

trixie

node-undici

Affected

Ubuntu

Unknown

devel

node-undici

Unknown

noble

node-undici

Unknown

noble (esm-apps)

node-undici

Unknown

resolute

node-undici

Unknown

resolute (esm-apps)

node-undici

Unknown

RHEL / CentOS

Fixed

OpenShift

el9:odf4/cephcsi-rhel9-0:v4.18.27

Fixed

RHEL 8

:appstream:nodejs:22/nodejs/nodejs-0:24.14.1-2.module%2Bel8.10.0%2B24190%2B49a46c75

Fixed

RHEL 9

:appstream:nodejs:24:9070020260402152654:rhel9/nodejs-0:24-9070020260402152654.rhel9.src

Fixed

RHEL 10

nodejs24-1:24.14.1-2.el10_1.src

Fixed

SourceThis report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-59160HIGH8.8
  • JavaScript logoJavaScript
  • @yeger/turbo-graph
NoYesSep 09, 2026
CVE-2026-59179HIGH8.3
  • JavaScript logoJavaScript
  • @openhop/server
NoYesSep 09, 2026
GHSA-x7m8-jrm8-hpvxHIGH8.1
  • JavaScript logoJavaScript
  • @eigenpal/docx-editor-core
NoYesSep 10, 2026
CVE-2026-59176HIGH7.8
  • JavaScript logoJavaScript
  • functype-mcp-server
NoYesSep 09, 2026
CVE-2026-59158HIGH7.5
  • JavaScript logoJavaScript
  • nuxt-ollama
NoYesSep 09, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management