ZeroHour

CVE-2026-69203

niche

Unauthenticated HTTP/2 Stream-Exhaustion DoS in http4s Ember Server and Client

CVSS 3.1
7.5 high
EPSS
Published
()
Modified
AI analysis

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.

Affected
http4s / Typelevel http4s-ember-serverAll 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-clientAll versions making HTTP/2 requests via EmberClientBuilder where enablePush is not enforced (no specific version range or fixed version stated in the advisory)
Estimated exposure
nichelikely under a few thousand internet-exposed services (order of magnitude: hundreds to low thousands) — http4s is a Scala/JVM-only library with no public install telemetry, and HTTP/2 in Ember is opt-in rather than default, so the exposed population is the small subset of Scala services that explicitly enabled h2 without an enforcing proxy…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

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 news

No ingested article mentions this CVE yet.