CVE-2026-69205: Http4s Ember Transfer-Encoding value parsing (TE.CL / TE.0 request smuggling)
Ember’s HTTP/1.1 header parser matches the Transfer-Encoding header value
with a case-sensitive substring test (hValue.contains("chunked")). RFC
9112 §7 requires transfer-coding names to be compared case-insensitively. A
request carrying Transfer-Encoding: Chunked (capital C) is therefore not
recognised as chunked, and Ember falls back to framing by Content-Length
(or zero if absent) while a compliant intermediary frames the same bytes by
chunked encoding. The two parsers then disagree on where the request body
ends, enabling HTTP request smuggling (TE.CL / TE.0).
The same line of code admits two further variants:
- The substring test misfires on
Transfer-Encoding: notchunked(an inverse desync — Ember treats it as chunked while a compliant intermediary rejects the unknown coding). - Header field bytes are decoded with the platform-default charset. Under
UTF-8 the wire bytes
E2 84 AAdecode to U+212A KELVIN SIGN, whichString.equalsIgnoreCaseUnicode-case-folds tok, soTransfer-Encoding: chun<U+212A>edmatcheschunkedonce the comparison is made case-insensitive without also pinning the decode to ISO-8859-1.
References
- github.com/advisories/GHSA-9998-894r-fwvr
- github.com/http4s/http4s/commit/5e88b2e7b4e6ea2f0c61040a4bc9de0d73e51217
- github.com/http4s/http4s/releases/tag/v0.23.35
- github.com/http4s/http4s/releases/tag/v1.0.0-M47
- github.com/http4s/http4s/security/advisories/GHSA-9998-894r-fwvr
- nvd.nist.gov/vuln/detail/CVE-2026-69205
Code Behaviors & Features
Detect and mitigate CVE-2026-69205 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →