Skip to main content
VulnerabilityPublished

CVE-2026-15157: undici vulnerable to CRLF Injection via blob-like body 'type' property

Affects undiciSource GCVE Database

0
Compare

Mentioned vulnerabilities

Not known to be exploited · CVSS 4.2 Medium : upgrade to 6.28.0 when convenient.

Data as of 1 Nov 2026, 22:58 UTC

CVSS 3.1 base score
4.2Medium
How severe the flaw is on the 0–10 CVSS scale.
EPSS
0.2% chance of exploitation in 30 days – higher than 17% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
Patch
Available – fixed in 6.28.0, 7.29.0, 8.9.0
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 3 Aug 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponized: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 1 Nov 2026.

What to do

Upgrade undici to 6.28.0; undici to 7.29.0; undici to 8.9.0.

Affected software

ProductAffectedFixed in
npmundiciAffected
  • <6.28.0
Fixed in
  • 6.28.0
npmundiciAffected
  • >=7.0.0 <7.29.0
Fixed in
  • 7.29.0
npmundiciAffected
  • >=8.0.0 <8.9.0
Fixed in
  • 8.9.0

Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.

Description

### Impact When an application passes a duck-typed blob-like body to undici's HTTP/1.1 dispatcher (via `request()`, `stream()`, `pipeline()`, or `dispatch()`) with a `.type` derived from untrusted input, an attacker can inject CRLF sequences (`\r\n`) to append arbitrary HTTP headers and potentially smuggle a second request past the upstream. The vulnerable branch in `lib/dispatcher/client-h1.js` pushes `body.type` directly into the outgoing headers with no validation, while every other header path in undici goes through `isValidHeaderValue()`: ```javascript } else if (util.isBlobLike(body) && request.contentType == null && body.type) { headers.push('content-type', body.type) // bypasses isValidHeaderValue() } ``` The bug requires a hand-rolled duck-typed blob object or a Blob subclass with a controlled `.type`. Native `Blob` is safe because its constructor strips CRLF from `.type`. `fetch()` is unaffected because it validates via the `Headers` class. Ecosystem consumers that build duck-typed blob shapes from user input include `form-data-encoder`, `formdata-polyfill`, and `formdata-node`. Same defect class as `CVE-2022-35948` (explicit `content-type` sink, fixed in undici 5.8.2) and `CVE-2026-1527` (`upgrade` option sink, fixed in 6.24.0 / 7.24.0), both closed by adding `isValidHeaderValue()` on their respective sinks. This branch was missed. ### Patches Patched in undici v6.28.0, v7.29.0, and v8.9.0. Users should upgrade to one of these versions or later. ### Workarounds - Set an explicit, validated `content-type` header on the request options (skips the vulnerable branch). - Use a native `Blob` (or `fetch-blob`) instead of a hand-rolled duck-typed object. - Reject control characters in the MIME type before assigning it to `.type`. - Use `fetch()` instead of the non-`fetch` APIs.

References

Community reviews

Loading reviews…