GitHub Advisoryadvisory · Maven
GHSA-jrpm-956j-96jg Http4s: Ember chunk parser lenience (TE.TE request smuggling)
MEDIUM
Official page ↗
- Aliases
- CVE-2026-69216
- Ecosystem
- Maven
- Packages
- org.http4s:http4s-ember-core_2.12, org.http4s:http4s-ember-core_2.13, org.http4s:http4s-ember-core_3
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
- Weaknesses
- CWE-444
- Reviewed
- 2026-09-15
Affected packages
• Maven org.http4s:http4s-ember-core_2.12: < 0.23.35 → fixed in 0.23.35
• Maven org.http4s:http4s-ember-core_2.13: < 0.23.35 → fixed in 0.23.35
• Maven org.http4s:http4s-ember-core_3: < 0.23.35 → fixed in 0.23.35
• Maven org.http4s:http4s-ember-core_2.13: >= 1.0.0-M1, < 1.0.0-M47 → fixed in 1.0.0-M47
• Maven org.http4s:http4s-ember-core_3: >= 1.0.0-M1, < 1.0.0-M47 → fixed in 1.0.0-M47
Description
Summary
Ember's chunk decoder parses the size token leniently: it strips leading and trailing whitespace and accepts a leading `+` or `-` sign. RFC9112 §7.1 defines `chunk-size = 1*HEXDIG`. An intermediary that parses the chunk boundary differently (or rejects it) will disagree with Ember on request framing, enabling HTTP request smuggling (TE.TE).
Impact
Server
Request smuggling (TE.TE) when ember-server is an origin behind an intermediary that forwards the body verbatim but interprets the malformed chunk sizes differently
• Front-end security bypass: the smuggled request reaches paths the intermediary might have blocked, with attacker-chosen method and headers.
• Cache poisoning: the smuggled response is associated with the next request key in a caching proxy.
• Request queue hijack:
Client
ember-client has the same leniencies on the response path, which enables response smuggling when http4s is used as a gateway. This is less severe, as it requires a malicious or compromised upstream rather than an anonymous remote client.
Preconditions
• Unauthenticated remote attacker (server)
• ember-server as origin behind a keep-alive intermediary
• Malicious or compromised upstream (client)
• Intermediary or upstream forwards chunked bodies without re-encoding and disagrees with Ember on `+` prefix, `-` prefix, or leading and trailing octets rather than rejecting.
Workarounds
• Intermediary strictly rejects malformed chunk sizes
• Intermediary buffers and re-encodes request bodies
References
• RFC9112 §7.1: Chunked Transfer Coding
Related
Alias · CVE (1)
- CVE-2026-69216 Http4s is a Scala interface for HTTP services. vulnerability
Weakness · CWE (1)
- CWE-444 Inconsistent Interpretation of HTTP Requests weakness
References
- https://github.com/http4s/http4s/security/advisories/GHSA-jrpm-956j-96jg web
- https://github.com/http4s/http4s/commit/d78612a5abd5a2547487598d3342be05573e16f0 web
- https://github.com/http4s/http4s package
- https://github.com/http4s/http4s/releases/tag/v0.23.35 web
- https://github.com/http4s/http4s/releases/tag/v1.0.0-M47 web