{
  "affected": [
    {
      "ranges": [
        {
          "database_specific": {
            "extracted_events": [
              {
                "introduced": "0"
              },
              {
                "fixed": "6.28.1"
              },
              {
                "introduced": "7.0.0"
              },
              {
                "fixed": "7.29.1"
              },
              {
                "introduced": "8.0.0"
              },
              {
                "fixed": "8.10.2"
              }
            ],
            "source": "AFFECTED_FIELD"
          },
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "ffc8aa0fdd4c54024f384e57784d5047c8b4085a"
            },
            {
              "introduced": "1cfe0949053aac6267f11b919cee9315a27f1fd6"
            },
            {
              "fixed": "d39a83e7b0d631590c3b85b5cc0dbeab66c3a1d8"
            },
            {
              "introduced": "d7fbba51772deecb830a297647456a5e9f9fec57"
            },
            {
              "fixed": "5e541e0b9df7563e5766bbd469fbfe383d9ae6ca"
            }
          ],
          "repo": "https://github.com/nodejs/undici",
          "type": "GIT"
        }
      ]
    }
  ],
  "aliases": [
    "GHSA-r53p-7pc4-xj5r"
  ],
  "database_specific": {
    "cna_assigner": "openjs",
    "cwe_ids": [
      "CWE-444"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/18xxx/CVE-2026-18540.json"
  },
  "details": "undici's retry interceptor can append the body of a ranged retry response to bytes already delivered from an earlier partial response while still presenting the original response's status and headers. This happens when an upstream server delivers part of a body without a trustworthy resume checkpoint, for example a non-success response whose headers were already sent or a partial-content response with an unusable content range, then closes the connection and answers the resumed range request with more bytes. As a result the response body can be longer than the Content-Length that the application observes. An application that relays such a response to a downstream HTTP/1.1 peer without normalizing the framing can emit a body that exceeds the forwarded Content-Length, and the excess bytes can be interpreted as the start of a following response, which enables downstream response splitting or desynchronization. Exploitation requires an attacker-controlled upstream server and an application that forwards the response through a framing-sensitive path. This affects undici versions before 6.28.1, from 7.0.0 up to 7.29.1, and from 8.0.0 up to 8.10.2. Users should upgrade to undici 6.28.1, 7.29.1, or 8.10.2.",
  "id": "CVE-2026-18540",
  "modified": "2026-09-06T03:30:16.315226224Z",
  "published": "2026-09-04T17:15:50.619Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://cna.openjsf.org/security-advisories.html"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/18xxx/CVE-2026-18540.json"
    },
    {
      "type": "ADVISORY",
      "url": "https://github.com/nodejs/undici/security/advisories/GHSA-r53p-7pc4-xj5r"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-18540"
    }
  ],
  "schema_version": "1.9.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "undici vulnerable to downstream response splitting via retry interceptor"
}