GHSA-8h4c-x2wg-6xp8: Maven/org.http4s:http4s-ember-core_3 vulnerability

Published Sep 15, 2026
·
Updated

Summary

Ember's HTTP/1.1 request parser does not reject a message that carries both a Transfer-Encoding and a Content-Length header. RFC 9112 §6.1 requires a server to treat such a message as a framing error and close the connection. An intermediary that follows the RFC's CL-strip-and-forward path (or that prioritises Content-Length) will frame the body differently from Ember, enabling HTTP request smuggling (CL.TE).

Impact

Server

Request smuggling when ember-server is an origin behind an intermediary that forwards both headers over a keep-alive backend connection and frames by Content-Length while Ember frames by chunked:

- Front-end security bypass: the smuggled request reaches paths the intermediary's ACL/auth layer would have blocked, with attacker-chosen method and headers. - Cross-user request hijack: a dangling smuggled prefix concatenates with the next victim's request on the shared backend socket, capturing its headers. - Cache poisoning: the smuggled response is associated with the next request key in a caching proxy.

Client

ember-client shares the same parser on the response path. An upstream that sends both headers can desync a pooled client connection. This requires a malicious or compromised upstream.

Preconditions

- Unauthenticated remote attacker (server) - ember-server as origin behind a keep-alive intermediary - Intermediary forwards a request carrying both Transfer-Encoding and Content-Length (RFC says it MAY reject; many forward) and frames by Content-Length - Malicious or compromised upstream (client)

Workarounds

- Intermediary strictly rejects requests carrying both Transfer-Encoding and Content-Length - Intermediary buffers and re-encodes request bodies - Disable backend keep-alive between the intermediary and Ember

Affected Software

4 affected componentsFixes available
maven/org.http4s:http4s-ember-core_3>=1.0.0-M1<=1.0.0-M46
1.0.0-M47
maven/org.http4s:http4s-ember-core_2.13>=1.0.0-M1<=1.0.0-M46
1.0.0-M47
maven/org.http4s:http4s-ember-core_3<=0.23.34
0.23.35
maven/org.http4s:http4s-ember-core_2.13<=0.23.34
0.23.35

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade maven/org.http4s:http4s-ember-core_3 to a version that resolves this vulnerability.

    Fixed in 1.0.0-M47
  2. Upgrade

    Upgrade maven/org.http4s:http4s-ember-core_2.13 to a version that resolves this vulnerability.

    Fixed in 1.0.0-M47
  3. Upgrade

    Upgrade maven/org.http4s:http4s-ember-core_3 to a version that resolves this vulnerability.

    Fixed in 0.23.35
  4. Upgrade

    Upgrade maven/org.http4s:http4s-ember-core_2.13 to a version that resolves this vulnerability.

    Fixed in 0.23.35
  5. Upgrade

    Upgrade maven/org.http4s:http4s-ember-core_2.12 to a version that resolves this vulnerability.

    Fixed in 0.23.35
  6. Configuration

    Disable backend keep-alive between the intermediary and Ember to prevent request smuggling across a pooled HTTP connection.

    Ember server HTTP keep-alive between intermediary and Ember (backend keep-alive) = disable
  7. Compensating control

    Use an intermediary (e.g., caching proxy / ACL/auth layer) configuration that strictly rejects requests carrying both a Transfer-Encoding header and a Content-Length header (RFC 9112 §6.1) to mitigate CL.TE request smuggling.

Event History

Sep 15, 2026
Advisory Published
via GitHub·07:53 PM
Data Sourced
via GitHub·07:53 PM
DescriptionWeaknessAffected Software

Frequently Asked Questions

1

Which deployment patterns are exposed on the server side?

An ember-server origin is exposed when it sits behind an intermediary that forwards both Transfer-Encoding and Content-Length over a keep-alive backend connection, while the intermediary frames using Content-Length and Ember frames using chunked encoding.

2

What must an attacker be able to send to exploit the server-side issue?

The attacker needs to send a request containing both Transfer-Encoding and Content-Length headers through an intermediary with the described forwarding and framing behavior. The resulting framing disagreement enables CL.TE request smuggling.

3

When is ember-client affected?

ember-client is affected on the response path when an upstream sends both headers and the client uses pooled connections. The parser desynchronization can affect the pooled client connection.

4

Which Maven artifacts are identified by the advisory?

The advisory identifies maven/org.http4s:http4s-ember-core_3 and maven/org.http4s:http4s-ember-core_2.13.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203