GitHub Advisoryadvisory · npm

GHSA-mp2g-9vg9-f4cg h3 v1 has Request Smuggling (TE.TE) issue

HIGH Published 2026-01-15 Modified 2026-04-13 Official page ↗
Aliases
CVE-2026-23527
Ecosystem
npm
Packages
h3
Severity
High
CVSS vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L
Weaknesses
CWE-444
Reviewed
2026-01-15

Affected packages

• npm h3: < 1.15.5 → fixed in 1.15.5

Description

I was digging into h3 v1 (specifically v1.15.4) and found a critical HTTP Request Smuggling vulnerability. Basically, `readRawBody` is doing a strict case-sensitive check for the Transfer-Encoding header. It explicitly looks for "chunked", but per the RFC, this header should be case-insensitive. The Bug: If I send a request with Transfer-Encoding: ChuNked (mixed case), h3 misses it. Since it doesn't see "chunked" and there's no Content-Length, it assumes the body is empty and processes the request immediately. This leaves the actual body sitting on the socket, which triggers a classic TE.TE Desync (Request Smuggling) if the app is running behind a Layer 4 proxy or anything that doesn't normalize headers (like AWS NLB or Node proxies). Vulnerable Code (`src/utils/body.ts`): ```js if ( !Number.parseInt(event.node.req.headers["content-length"] || "") && !String(event.node.req.headers["transfer-encoding"] ?? "") .split(",") .map((e) => e.trim()) .filter(Boolean) .includes("chunked") // e.trim().toLowerCase())`

Related

Alias · CVE (1)

  • CVE-2026-23527 H3 is a minimal H(TTP) framework built for high performance and portability. vulnerability

Weakness · CWE (1)

  • CWE-444 Inconsistent Interpretation of HTTP Requests weakness

References