VYPR
Moderate severityNVD Advisory· Published Feb 16, 2023· Updated Mar 10, 2025

CRLF Injection in Nodejs ‘undici’ via host

CVE-2023-23936

Description

Undici is an HTTP/1.1 client for Node.js. Starting with version 2.0.0 and prior to version 5.19.1, the undici library does not protect host HTTP header from CRLF injection vulnerabilities. This issue is patched in Undici v5.19.1. As a workaround, sanitize the headers.host string before passing to undici.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
undicinpm
>= 2.0.0, < 5.19.15.19.1

Affected products

1

Patches

1
a2eff0540135

Merge pull request from GHSA-5r9g-qh6m-jxff

https://github.com/nodejs/undiciRobert NagyFeb 13, 2023via ghsa
2 files changed · +40 0
  • lib/core/request.js+3 0 modified
    @@ -304,6 +304,9 @@ function processHeader (request, key, val) {
         key.length === 4 &&
         key.toLowerCase() === 'host'
       ) {
    +    if (headerCharRegex.exec(val) !== null) {
    +      throw new InvalidArgumentError(`invalid ${key} header`)
    +    }
         // Consumed by Client
         request.host = val
       } else if (
    
  • test/headers-crlf.js+37 0 added
    @@ -0,0 +1,37 @@
    +'use strict'
    +
    +const { test } = require('tap')
    +const { Client } = require('..')
    +const { createServer } = require('http')
    +const EE = require('events')
    +
    +test('CRLF Injection in Nodejs ‘undici’ via host', (t) => {
    +  t.plan(1)
    +
    +  const server = createServer(async (req, res) => {
    +    res.end()
    +  })
    +  t.teardown(server.close.bind(server))
    +
    +  server.listen(0, async () => {
    +    const client = new Client(`http://localhost:${server.address().port}`)
    +    t.teardown(client.close.bind(client))
    +
    +    const unsanitizedContentTypeInput =  '12 \r\n\r\naaa:aaa'
    +
    +    try {
    +      const { body } = await client.request({
    +        path: '/',
    +        method: 'POST',
    +        headers: {
    +          'content-type': 'application/json',
    +          'host': unsanitizedContentTypeInput
    +        },
    +        body: 'asd'
    +      })
    +      await body.dump()
    +    } catch (err) {
    +      t.same(err.code, 'UND_ERR_INVALID_ARG')
    +    }
    +  })
    +})
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

6

News mentions

0

No linked articles in our index yet.