CVE-2026-69203
nicheUnauthenticated HTTP/2 Stream-Exhaustion DoS in http4s Ember Server and Client
http4s Ember, when HTTP/2 is explicitly enabled via .withHttp2, fails to enforce the SETTINGS_MAX_CONCURRENT_STREAMS limit, allowing a single unauthenticated connection to open an unbounded number of concurrent streams whose per-stream state is never released. An attacker can exploit this to exhaust the JVM heap and crash or degrade any Ember server speaking HTTP/2, making it a resource-exhaustion flaw in the same family as the 2023 HTTP/2 Rapid Reset attacks (CVE-2023-44487). The same unchecked allocation is reachable in ember-client through server-initiated PUSH_PROMISE frames, so a malicious or compromised origin can exhaust clients that make HTTP/2 requests to it. Affected parties are Scala/JVM services built on http4s Ember with HTTP/2 enabled, and ember clients connecting over HTTP/2 to untrusted servers. No public proof of concept is known and the flaw is not in the CISA KEV catalog, so exploitation in the wild is not indicated.
What to do: Upgrade Ember server and client to the next patched http4s release as soon as Typelevel publishes one, since no fixed version is identified in the advisory. Until then, disable HTTP/2 on EmberServerBuilder and EmberClientBuilder (this is the default configuration), and for clients avoid HTTP/2 to untrusted origins. If HTTP/2 must be kept, place Ember behind a load balancer or proxy that strictly enforces SETTINGS_MAX_CONCURRENT_STREAMS and monitor JVM heap and connection/stream counts for anomalous growth.
| http4s / Typelevel http4s-ember-server | All versions with HTTP/2 support enabled via .withHttp2 on EmberServerBuilder (no specific version range or fixed version stated in the advisory) |
| http4s / Typelevel http4s-ember-client | All versions making HTTP/2 requests via EmberClientBuilder where enablePush is not enforced (no specific version range or fixed version stated in the advisory) |
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, An Ember server with HTTP/2 enabled through withHttp2 does not enforce SETTINGS_MAX_CONCURRENT_STREAMS for peer-created streams. One unauthenticated connection can open an unbounded number of streams, each retaining per-stream state until heap exhaustion. The same unchecked allocation is reachable in an ember-client through server-initiated PUSH_PROMISE frames because enablePush is not enforced. This issue is fixed in versions 0.23.35 and 1.0.0-M47.
- Ecosystems
- maven
- Weakness
- CWE-400, CWE-770
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- GHSA
- GHSA-9vwc-pc8p-253q (high)
In the news0 stories
No ingested article mentions this CVE yet.