ZeroHour

CVE-2026-88975

niche

Unauthenticated HTTP/2 Memory-Exhaustion DoS in http4s Ember

CVSS 3.1
7.5 high
EPSS
Published
()
Modified
AI analysis

http4s Ember's HTTP/2 implementation buffers a frame's entire declared payload — up to 16 MiB, bounded only by the protocol's 24-bit length field — into contiguous memory before checking it against the advertised SETTINGS_MAX_FRAME_SIZE (16 KiB), because the validation in processFrame cannot run until the frame is fully assembled. An unauthenticated attacker triggers it simply by opening an HTTP/2 connection and declaring an oversized frame; no request, stream association, or credentials are required, and dribbling the payload without finishing evades rejection entirely since incomplete frames never reach validation. The result is uncontrolled resource consumption and remote denial of service by memory exhaustion — roughly 16 GiB of heap within reach at the default 1024 maxConnections — and the client side is symmetric because ember-client's readLoop shares the same code path. Only deployments explicitly built with .withHttp2 on ember-server or ember-client are affected; HTTP/2 is off by default on both builders. No public PoC exists, the CVE is not in CISA's KEV, and no exploitation in the wild is known.

What to do: Upgrade to a patched http4s release as soon as one is published (track http4s security advisories for CVE-2026-88975), since the flaw sits in ember-core's H2Frame/H2Connection read loop and cannot be fixed in application code. Until then, disable HTTP/2 on Ember (it is off by default) or terminate HTTP/2 at a reverse proxy that enforces frame-size limits and speak HTTP/1.1 to the backend. Note that lowering SETTINGS_MAX_FRAME_SIZE or setting withIdleTimeout provides no mitigation — the check runs only after buffering and dribbled frames make steady read progress — so also monitor heap usage on any HTTP/2 listeners you cannot yet disable.

Affected
http4s ember-server
http4s ember-client
Estimated exposure
nicheunknown — limited to opt-in HTTP/2 deployments of a niche Scala/JVM library — No install counts, download statistics, or internet-exposure scans were provided; http4s occupies a small slice of the JVM web-server ecosystem and HTTP/2 must be explicitly enabled via .withHttp2, so only a small fraction of http4s…

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.37 and 1.0.0-M48, Ember’s HTTP/2 read loop parses a frame’s 24-bit declared length but waits to buffer the entire payload before comparing it with SETTINGS_MAX_FRAME_SIZE. An unauthenticated peer can declare a payload near 16 MiB on a connection where Ember advertised 16 KiB and either complete or slowly stream it, causing up to 1024-fold memory amplification per connection before processFrame can reject the frame. The shared H2Connection.readLoop affects withHttp2 servers and clients, while HTTP/2-disabled configurations are unaffected, and the patch rejects oversized frames before buffering their payloads. This issue is fixed in versions 0.23.37 and 1.0.0-M48.

Ecosystems
maven
Weakness
CWE-400
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
GHSA
GHSA-gq9p-f254-h286 (high)

In the news

No ingested article mentions this CVE yet.