ZeroHour

CVE-2026-69218

niche

Unbounded HTTP/2 CONTINUATION Frame Accumulation in http4s Ember

CVSS 3.1
7.5 high
EPSS
Published
()
Modified
AI analysis

http4s Ember, the native Scala HTTP server and client, fails to limit how much data can accumulate from HTTP/2 CONTINUATION frames that follow a HEADERS or PUSH_PROMISE frame without the END_HEADERS flag, allowing unbounded heap growth until the connection closes. A remote, unauthenticated attacker can send an endless stream of CONTINUATION frames against any reachable path on an Ember server configured with .withHttp2 (even paths returning 404), exhausting memory and crashing or degrading the service; a malicious origin server can likewise exhaust an Ember client's memory via an oversized response header block. The attack completes before the request is decoded, so no authentication or valid path is required, and consumption is limited only by the attacker's bandwidth and connection lifetime. Only deployments that explicitly enabled HTTP/2 via .withHttp2 are affected, since HTTP/2 is off by default; the fix bounds the accumulated header block at SETTINGS_MAX_HEADER_LIST_SIZE and terminates offending connections with GOAWAY. No public proof of concept or in-the-wild exploitation is known, and the flaw is not in the CISA KEV catalog.

What to do: Upgrade to a patched http4s Ember release that enforces SETTINGS_MAX_HEADER_LIST_SIZE (derived from maxHeaderSize / maxResponseHeaderSize) and terminates oversize header blocks with GOAWAY; if an immediate upgrade is not possible, remove .withHttp2 (reverting to the HTTP/1.1 default) or place Ember behind a reverse proxy that terminates HTTP/2 itself and speaks HTTP/1.1 to Ember. Also verify that receiveHeadersTimeout is configured to bound how long an incomplete header block may remain open, and monitor Ember processes for unexpected heap growth.

Affected
Typelevel http4s-ember-server
Typelevel http4s-ember-client
Estimated exposure
nichelikely on the order of hundreds to low thousands of internet-exposed services — http4s is a widely used Scala/JVM web framework with tens of thousands of dependent projects, but HTTP/2 in Ember is opt-in and off by default and such services are typically deployed behind reverse proxies, so only a small fraction…

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, When Ember receives an HTTP/2 HEADERS or PUSH_PROMISE frame without END_HEADERS, H2Connection buffers the header block and subsequent CONTINUATION fragments without a size bound. A remote peer can keep an incomplete block open and exhaust heap memory before request decoding, affecting an ember-server or ember-client configured with withHttp2. The remediation tracks accumulated size against SETTINGS_MAX_HEADER_LIST_SIZE derived from EmberServerBuilder.maxHeaderSize or EmberClientBuilder.maxResponseHeaderSize, sends GOAWAY when the limit is exceeded, and applies receiveHeadersTimeout to incomplete blocks. This issue is fixed in versions 0.23.35 and 1.0.0-M47.

Ecosystems
maven
Weakness
CWE-770
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
GHSA
GHSA-cp4q-fqw9-4hf6 (high)

In the news

No ingested article mentions this CVE yet.