GHSA-cp4q-fqw9-4hf6: High severity maven/org.http4s:http4s-ember-core_3 vulnerability

Published Sep 15, 2026
·
Updated

When Ember receives an HTTP/2 HEADERS or PUSHPROMISE frame without the ENDHEADERS flag, it buffers the header block fragment and waits for subsequent CONTINUATION frames. These accumulate unbounded until the connection closes.

Impact

A remote, unauthenticated peer can exhaust the heap on any Ember endpoint that has HTTP/2 enabled:

- ember-server with .withHttp2: any HTTP/2 client can trigger this against any reachable path (including paths that return 404). No authentication is required because the attack completes before the request is decoded. - ember-client with .withHttp2: a malicious or compromised origin server can trigger this via the response header block. A single in-flight request is sufficient.

Memory consumption is bounded only by the attacker's upload bandwidth and the connection lifetime.

Prerequisites

- EmberServerBuilder configured with .withHttp2. - For the server: the attacker can establish an HTTP/2 connection - For the client: the application makes a request to an attacker-controlled origin. HTTP/2 incoming headers exceeding the configured size limit are buffer in order to generate an informative HTTP 413 response. If a client does not stop sending headers, this leads to memory exhaustion.

Patches

The fix bounds the accumulated header-block size at SETTINGSMAXHEADERLISTSIZE (derived from EmberServerBuilder.maxHeaderSize / EmberClientBuilder.maxResponseHeaderSize). When a CONTINUATION frame would push the accumulated block over that limit, the connection is terminated with GOAWAY. The receiveHeadersTimeout additionally bounds how long an incomplete header block may remain open.

Workarounds

- Disable HTTP/2 (.withHttp2) until upgraded (default). It is off by default. - If HTTP/2 must remain enabled, place ember behind a reverse proxy that terminates HTTP/2 and speaks HTTP/1.1 to 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 HTTP/2 by not enabling `.withHttp2` on ember-client until upgraded.

    ember-client (.withHttp2) withHttp2 = disabled
  7. Configuration

    Disable HTTP/2 by not enabling `.withHttp2` on ember-server until upgraded (it is off by default).

    ember-server (.withHttp2) withHttp2 = disabled
  8. Configuration

    Configure `EmberServerBuilder.maxHeaderSize` (and/or `EmberClientBuilder.maxResponseHeaderSize`) so the derived HTTP/2 `SETTINGS_MAX_HEADER_LIST_SIZE` bounds accumulated header-block size; this is the behavior introduced by the fix.

    Ember server/client header limits (derived from EmberServerBuilder.maxHeaderSize / EmberClientBuilder.maxResponseHeaderSize) SETTINGS_MAX_HEADER_LIST_SIZE = bounded
  9. Compensating control

    If HTTP/2 must remain enabled, place ember behind a reverse proxy that terminates HTTP/2 and speaks HTTP/1.1 to ember.

Event History

Sep 15, 2026
Advisory Published
via GitHub·08:01 PM
Data Sourced
via GitHub·08:01 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which deployments are exposed?

Server deployments are exposed only when EmberServerBuilder is configured with .withHttp2 and an attacker can establish an HTTP/2 connection. Client deployments are exposed when ember-client uses .withHttp2 and the application makes a request to an attacker-controlled or compromised origin.

2

Does an attacker need credentials or a valid application request?

No. Against an HTTP/2-enabled server, an unauthenticated client can trigger the issue on any reachable path, including one that returns 404, because the attack occurs before request decoding. A malicious server can trigger the client-side issue with a single in-flight request.

3

What can be done if updating is not immediately possible?

Disable HTTP/2 by removing the .withHttp2 configuration where feasible. This removes the stated prerequisite for both affected Ember server and client scenarios.

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