GitHub Advisoryadvisory · npm
GHSA-mp2g-9vg9-f4cg h3 v1 has Request Smuggling (TE.TE) issue
HIGH
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
- https://github.com/h3js/h3/security/advisories/GHSA-mp2g-9vg9-f4cg web
- https://nvd.nist.gov/vuln/detail/CVE-2026-23527 advisory
- https://github.com/h3js/h3/commit/618ccf4f37b8b6148bea7f36040471af45bfb097 web
- https://github.com/h3js/h3 package
- https://github.com/h3js/h3/releases/tag/v1.15.5 web
- https://simonkoeck.com/writeups/h3-transfer-encoding-request-smuggling web