CVE-2026-69205
moderateHTTP Request Smuggling in http4s Ember via Case-Sensitive Transfer-Encoding Parsing
The Ember HTTP/1.x header parser in the Scala toolkit http4s tests the Transfer-Encoding header value with a case-sensitive substring match for 'chunked', violating RFC 9112 §7's requirement for case-insensitive comparison. An unauthenticated remote attacker who sends 'Transfer-Encoding: Chunked' (or values like 'notchunked' or a Kelvin-sign variant) causes Ember and an RFC-compliant front-end proxy to disagree on where the request body ends, enabling classic TE.CL / TE.0 request smuggling. Successful exploitation lets the attacker bypass front-end ACLs and authentication, hijack the next victim's request on a pooled keep-alive connection to capture its Cookie/Authorization headers, or poison cache entries; ember-client shares the same parser and enables response smuggling when http4s acts as a gateway to a malicious upstream. Any deployment running ember-server as an origin behind a proxy that treats Transfer-Encoding case-insensitively and forwards it verbatim is affected. No public proof of concept is known and there is no evidence of in-the-wild exploitation, though the issue carries a high CVSS 3.1 score of 8.7.
What to do: Upgrade http4s ember-server and ember-client to the first release that performs a case-insensitive, charset-pinned (ISO-8859-1) Transfer-Encoding token comparison, checking the http4s security advisories for the exact fixed versions once published. Where an immediate upgrade is not possible, mitigate at the intermediary: enable full request buffering and re-encoding (e.g. nginx's default proxy_request_buffering on), normalize or lowercase the Transfer-Encoding token before forwarding, or disable keep-alive between the proxy and the Ember backend. Audit gateway-style deployments using ember-client for signs of response-splitting from untrusted upstreams.
| http4s ember-server (http4s-ember-server, Maven artifact) | — |
| http4s ember-client (http4s-ember-client, Maven artifact) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, Ember’s HeaderP.parse uses a case-sensitive substring test for the Transfer-Encoding value and decodes header bytes with the platform default charset. Values such as Chunked are not recognized, values such as notchunked are incorrectly accepted, and Unicode case folding can turn a Kelvin-sign byte sequence into a match when UTF-8 is used. Intermediaries that apply RFC-compliant token and charset rules can therefore disagree with Ember’s Content-Length or zero-length framing, enabling TE.CL or TE.0 request smuggling, access-control bypass, cross-user request hijacking, and cache poisoning on the server path. Response smuggling through an ember-client gateway requires a malicious or compromised upstream. This issue is fixed in versions 0.23.35 and 1.0.0-M47.
- Ecosystems
- maven
- Weakness
- CWE-444
- Vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:N
- GHSA
- GHSA-9998-894r-fwvr (high)
In the news0 stories
No ingested article mentions this CVE yet.