CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-69213

CVE-2026-69213: Uncontrolled Resource Consumption (DoS) in http4s Ember HTTP/2 Implementation

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 16, 2026·7 min read·1 visit

Executive Summary (TL;DR)

Ember HTTP/2 in http4s fails to limit outbound response queues, permitting remote attackers to crash the JVM via OutOfMemoryError by flooding control frames while stalling socket reads.

An uncontrolled resource consumption vulnerability (CVE-2026-69213) in the http4s Ember HTTP/2 server and client implementations allows unauthenticated remote attackers to trigger an OutOfMemoryError (OOM) and cause a Denial of Service (DoS) by exploiting unbounded outbound queues.

Vulnerability Overview

The HTTP/2 protocol implementation within the http4s Ember server and client modules (http4s-ember-core) suffers from a high-severity resource consumption flaw. The vulnerability resides in the outbound transmission subsystem, which serializes outgoing HTTP/2 frames. An unauthenticated attacker can remotely trigger memory exhaustion by abusing the protocol's automatic control frame exchange mechanisms, resulting in a complete denial of service.

In standard HTTP/2 configurations, servers and clients must process various connection-level control frames such as PING, SETTINGS, and WINDOW_UPDATE. These frames are treated with high priority to maintain connection health, handle flow control windows, and perform diagnostics. Because these operational frames operate below the application stream layer, they are processed and acknowledged automatically without standard stream-level backpressure limits.

The attack surface exists on any network-exposed endpoint utilizing the Ember HTTP/2 backend. Because the vulnerability lies within the library's protocol management layer, no specific application-level route or endpoint configuration is required to exploit it. The flaw exposes both public-facing servers (H2Server) and outbound client connections (H2Client) to remote disruption.

Root Cause Analysis

The technical root cause of CVE-2026-69213 lies in the selection of an unbounded queue container for buffering outbound HTTP/2 frames. Specifically, both H2Client and H2Server instantiate their outgoing frame buffers using cats.effect.std.Queue.unbounded. This queue is designed to store outbound frames before they are serialized and written to the network interface by a dedicated, asynchronous consumer fiber known as the writeLoop.

When a remote peer sends an HTTP/2 control frame, the server immediately constructs a corresponding response frame—such as a PING ACK or a SETTINGS acknowledgment—and appends it to this queue. This architecture functions correctly under normal network conditions where the consumer fiber can continuously drain the queue and write the data to the TCP socket. However, because the queue has no upper bound, there is no limit on the number of elements it can hold simultaneously.

If the remote peer maliciously pauses its socket reads (such as by setting its TCP window size to zero or simply refusing to read incoming TCP packets), the server's TCP send buffer quickly fills up. Once the socket buffer is saturated, the writeLoop fiber blocks on its next write operation. Despite the writer being blocked, the server continues to accept incoming control frames from the attacker over the established read path, processing them and pushing response frames into the outbound queue indefinitely. Because the queue lacks backpressure controls, it grows linearly with the attacker's inputs until the JVM heap space is entirely exhausted.

Code Analysis

To understand the structural bug, we must analyze the instantiation of the outbound queue in the vulnerable vs. patched codebases of H2Server and H2Client.

In the vulnerable implementation, the queue is created using Queue.unbounded. The following code snippet shows the exact vulnerable line:

// Vulnerable queue creation in H2Server.scala and H2Client.scala
queue <- cats.effect.std.Queue.unbounded[F, Chunk[H2Frame]]

Because this queue lacks a capacity limit, the producer fibers generating responses (e.g., PING responses) are never suspended. They continue to call queue.offer successfully, bypassing any potential memory-saving suspension mechanisms. Under load, this leads to rapid memory inflation.

To remediate this issue, the maintainers modified the queue initialization to use a bounded variant, establishing a threshold of 128 chunks. The patched code is shown below:

// Patched queue creation introducing a bound of 128 elements
queue <- cats.effect.std.Queue.bounded[F, Chunk[H2Frame]](128)

By switching to Queue.bounded(128), the cats-effect library's cooperative multitasking model is leveraged. When the queue contains 128 chunks of frames and the writeLoop fiber is blocked by a stalled TCP socket, any subsequent call to queue.offer will semantically block (suspend) the calling producer fiber. This introduces natural backpressure, stopping the generation of new outbound frames until the socket is cleared and the queue is drained.

Exploitation Methodology

Exploitation of CVE-2026-69213 does not require authentication or specific environment configurations beyond an active HTTP/2 connection. The attack relies on establishing a stable TCP connection to the target server and executing a 'stalled reader' attack sequence.

First, the attacker establishes an HTTP/2 connection and performs the standard handshake. Next, the attacker configures their local socket settings to stop reading bytes from the target. This can be achieved by decreasing the TCP receive window size to zero or using socket options to stall the socket read buffer entirely. At this point, the target server's outbound queue begins accumulating frames because its writeLoop is unable to push data through the network socket.

Once the TCP stream is choked, the attacker continuously floods the target with high-velocity, lightweight HTTP/2 control frames such as PING frames. The target server processes each frame, produces an acknowledgment, and attempts to enqueue it. Because the writeLoop fiber is blocked, the queue size swells exponentially, generating a linear accumulation of Chunk[H2Frame] objects in heap memory. The attack is sustained until the JVM environment crashes due to a heap-exhaustion java.lang.OutOfMemoryError.

Impact Assessment

The primary impact of this vulnerability is a complete and sustained denial of service (DoS) of the affected JVM process. Because an OutOfMemoryError usually destabilizes the entire Java Virtual Machine, the application will crash, terminating all active connections and rendering the service unavailable to legitimate users. Recovery typically requires a manual or automated restart of the application container.

This vulnerability has been assigned a CVSS v3.1 base score of 7.5 (High), with the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. The attack requires low complexity, can be initiated over the network by any unauthenticated entity, and demands no user interaction, resulting in a maximum rating for the Availability impact metric.

In client-side configurations where H2Client is utilized, the application is also vulnerable if it connects to an untrusted or compromised HTTP/2 upstream server. A malicious server can apply the identical socket-stalling technique and flood the client with control frames, causing the client-side Scala application to run out of memory and crash. This highlights the importance of patching both servers and outbound client integration libraries.

Remediation and Long-Term Mitigation

The primary remediation strategy is upgrading the http4s-ember-core dependency to a patched release. For users on the 0.23.x branch, the vulnerability is fully addressed in version 0.23.35. For applications adopting the 1.0.0 milestone releases, the fix is integrated into version 1.0.0-M47 and subsequent builds.

If immediate software upgrade is not feasible, several defensive workarounds can be implemented to mitigate the threat vector. First, if HTTP/2 is not strictly required by the application architecture, it can be disabled within the Ember server builder by omitting the withHttp2 parameter, reverting communications to standard HTTP/1.1 where this unbounded queue architecture is absent.

Additionally, deploying a robust reverse proxy or Load Balancer (such as Nginx, Envoy, or AWS Application Load Balancer) in front of the http4s application provides an effective mitigation layer. The reverse proxy will handle HTTP/2 protocol termination, manage the connection-level flow control windows, and enforce write timeouts, severing connections that attempt socket stalling before they can exhaust application-tier resources.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

org.http4s:http4s-ember-corehttp4s Ember HTTP/2 Serverhttp4s Ember HTTP/2 Client

Affected Versions Detail

Product
Affected Versions
Fixed Version
http4s-ember-core
http4s
< 0.23.350.23.35
http4s-ember-core
http4s
>= 1.0.0-M1, < 1.0.0-M471.0.0-M47
AttributeDetail
CWE IDCWE-400, CWE-770
Attack VectorNetwork
CVSS v3.17.5 (High)
ImpactDenial of Service (DoS)
Exploit StatusNo Public Exploit Available
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-400
Uncontrolled Resource Consumption

The software does not properly control the allocation and maintenance of a limited resource, enabling an actor to influence the amount of resources consumed and exhaust them.

Vulnerability Timeline

Fix commit authored and merged into http4s/http4s repository
2026-06-25
GitHub Security Advisory GHSA-8f3q-3jmv-7prw published
2026-09-15
CVE-2026-69213 assigned and published to NVD
2026-09-15

References & Sources

  • [1]GitHub Security Advisory GHSA-8f3q-3jmv-7prw
  • [2]GitHub Fix Commit
  • [3]Http4s Release v0.23.35
  • [4]Http4s Release v1.0.0-M47
  • [5]CVE Record (CVE.org)
  • [6]NVD Entry

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•19 minutes ago•CVE-2026-61598
7.1

CVE-2026-61598: Remote State Modification via Mass Assignment in djust Framework

CVE-2026-61598 is a high-severity mass-assignment vulnerability (CWE-915) affecting the Python package djust prior to version 1.0.7. An authenticated client can supply arbitrary parameter names to modify public view attributes on the server via WebSocket events, leading to unauthorized state manipulation, authorization bypass, or price tampering.

Alon Barad
Alon Barad
2 views•6 min read
•about 2 hours ago•CVE-2026-60137
5.9

CVE-2026-60137: SQL Injection in WordPress Core WP_Query Class via author__not_in Parameter

CVE-2026-60137 is a critical SQL injection vulnerability in the Core component of WordPress. The flaw occurs within the WP_Query class during the processing of the author__not_in parameter, where user-supplied array inputs are constructed into a SQL string without strict integer type-casting. When chained with CVE-2026-63030, an unauthenticated remote attacker can exploit this SQL injection to read database values, extract administrator credential hashes, or modify administrative options to execute arbitrary PHP code on the server.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 2 hours ago•CVE-2026-69214
6.8

CVE-2026-69214: Session Fixation via Arbitrary Set-Cookie Domain Acceptance in http4s CookieJar Middleware

A validation flaw exists in the CookieJar client middleware of the http4s library. Prior to versions 0.23.35 and 1.0.0-M47, the middleware trusts server-supplied Domain attributes in HTTP Set-Cookie response headers without confirming that the domain matches the origin host. A malicious server can leverage this to register unauthorized cookies targeting different domains, creating potential session fixation or cookie poisoning vectors.

Alon Barad
Alon Barad
4 views•5 min read
•about 3 hours ago•CVE-2026-69215
6.8

CVE-2026-69215: Cross-Origin Cookie Leakage via Improper Domain and Path Matching in http4s CookieJar Client Middleware

A medium-severity cross-origin cookie leakage vulnerability exists in the CookieJar client middleware of the http4s library. Due to unanchored substring searches used to determine whether a cookie applies to an outbound request, sensitive cookies (such as session IDs and credentials) can be inadvertently sent to unauthorized domains or paths.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 4 hours ago•CVE-2026-69216
5.4

CVE-2026-69216: HTTP Request/Response Smuggling in http4s Ember Parser

An HTTP Request/Response Smuggling vulnerability (CVE-2026-69216) was identified in the Ember chunked transfer encoding decoder of the http4s Scala library. Due to parser leniency accepting sign prefixes, surrounding whitespace, and missing trailing CRLFs, attackers can bypass proxy security boundaries, poison shared caches, or hijack request queues.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 5 hours ago•CVE-2026-69218
7.5

CVE-2026-69218: Denial of Service via Unbounded HTTP/2 Continuation Frame Buffering in http4s Ember

A critical resource exhaustion vulnerability exists in the http4s Ember HTTP/2 server and client implementations. By failing to limit the size or quantity of incoming HTTP/2 CONTINUATION frames, the engine allows unauthenticated remote attackers to exhaust JVM heap memory, causing a complete Denial of Service.

Amit Schendel
Amit Schendel
3 views•7 min read