CVE-2026-54340: H2O: HTTP/2 HPACK amplification enables DoS

HIGH
Published July 16, 2026
CISO Take

H2O's HTTP/2 implementation lets an attacker combine HPACK header decompression amplification with Slowloris-style stream stalling, forcing the server to retain outsized decoded header state on connections it deliberately keeps half-open, which exhausts memory and CPU until the service stops responding. This is a pure availability attack (CVSS 7.5, AV:N/AC:L/PR:N/UI:N, no confidentiality or integrity impact) that requires no authentication and no user interaction, so any internet-facing h2o instance is exposed; there is no public exploit code, scanner template, or CISA KEV listing yet, so real-world exploitation likelihood is currently unconfirmed rather than active. Because h2o's web server underpins the API and dashboard layer of H2O.ai's ML platform — flagged here with 26 downstream dependents — a successful attack could take down model-serving endpoints or admin UIs that AI teams rely on for scoring and monitoring. Patch to the release containing the fix (commit 9265bdd) as soon as it's packaged, and in the meantime bound decoded header state, concurrent streams, and idle-stream timeouts at the h2o config or edge proxy layer. Watch for connections with abnormally long idle periods paired with large HEADERS frames as an early detection signal.

Sources: NVD GitHub Advisory OpenSSF ATLAS

What is the risk?

Availability-only risk (CIA: none/none/high) with network vector, low attack complexity, and no privileges or user interaction required — the classic profile of a pre-auth DoS. Exploitability today is unconfirmed in the wild: no EPSS score, no CISA KEV entry, and no public PoC or Nuclei template exists yet, so this should be treated as 'patch before it becomes ambient internet noise' rather than an active-exploitation emergency. The package carries 13 other recorded CVEs and an OpenSSF Scorecard of 5.9/10, indicating a track record of security findings that warrants a proactive patch cadence rather than reactive handling of this bug alone.

How does the attack unfold?

Reconnaissance
Attacker identifies an internet-facing h2o HTTP/2 endpoint (model API, Flow UI, or admin dashboard) to target.
AML.T0006
Connection flood with crafted headers
Attacker opens numerous HTTP/2 connections and sends HEADERS frames with highly compressible HPACK-encoded header blocks while stalling each stream mid-request.
AML.T0049
Resource amplification
h2o retains fully decoded header state for each stalled stream, causing server memory and CPU consumption to grow disproportionately to the attacker's actual traffic.
Denial of service impact
Server resources are exhausted, making the ML inference API or admin interface unresponsive to legitimate users.
AML.T0029

What systems are affected?

Package Ecosystem Vulnerable Range Patched
H2O pip No patch
7.5K OpenSSF 5.7 27 dependents Pushed 4d ago 5% patched ~0d to patch Full package profile →

Do you use H2O? You're affected.

How severe is it?

CVSS 3.1
7.5 / 10
EPSS
0.5%
chance of exploitation in 30 days
Higher than 40% of all CVEs
Exploitation Status
No known exploitation
Sophistication
Moderate

What is the attack surface?

AV AC PR UI S C I A
AV Network
AC Low
PR None
UI None
S Unchanged
C None
I None
A High

What should I do?

1 step
  1. Upgrade to the h2o release containing commit 9265bdd as the primary fix — check GitHub Security Advisory GHSA-qcrr-wrhc-pgq9 for the specific patched version once available. Until patched, mitigate at the edge: enforce a bounded SETTINGS_MAX_CONCURRENT_STREAMS and HPACK dynamic table/decoded-header-size limit, set aggressive idle/stream-stall timeouts, and consider terminating HTTP/2 at a reverse proxy (nginx, Envoy, Cloudflare) that already caps these amplification vectors in front of h2o. For detection, alert on connections with abnormally low throughput but high decoded-header-state retention, and monitor server memory/CPU for sawtooth patterns correlated with HTTP/2 stream counts. Since this is a pure DoS with no data impact, prioritize patching internet-facing instances first; internal-only deployments behind a stream-limiting WAF are lower urgency.

What does CISA's SSVC say?

Decision Track
Exploitation none
Automatable Yes
Technical Impact partial

Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

EU AI Act
Article 15 - Accuracy, robustness and cybersecurity
ISO 42001
Clause 8.1 - Operational planning and control
NIST AI RMF
MEASURE 2.7 - AI system security and resilience is evaluated and documented
OWASP LLM Top 10
LLM10:2025 - Unbounded Consumption

Frequently Asked Questions

What is CVE-2026-54340?

H2O's HTTP/2 implementation lets an attacker combine HPACK header decompression amplification with Slowloris-style stream stalling, forcing the server to retain outsized decoded header state on connections it deliberately keeps half-open, which exhausts memory and CPU until the service stops responding. This is a pure availability attack (CVSS 7.5, AV:N/AC:L/PR:N/UI:N, no confidentiality or integrity impact) that requires no authentication and no user interaction, so any internet-facing h2o instance is exposed; there is no public exploit code, scanner template, or CISA KEV listing yet, so real-world exploitation likelihood is currently unconfirmed rather than active. Because h2o's web server underpins the API and dashboard layer of H2O.ai's ML platform — flagged here with 26 downstream dependents — a successful attack could take down model-serving endpoints or admin UIs that AI teams rely on for scoring and monitoring. Patch to the release containing the fix (commit 9265bdd) as soon as it's packaged, and in the meantime bound decoded header state, concurrent streams, and idle-stream timeouts at the h2o config or edge proxy layer. Watch for connections with abnormally long idle periods paired with large HEADERS frames as an early detection signal.

Is CVE-2026-54340 actively exploited?

No confirmed active exploitation of CVE-2026-54340 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-54340?

Upgrade to the h2o release containing commit 9265bdd as the primary fix — check GitHub Security Advisory GHSA-qcrr-wrhc-pgq9 for the specific patched version once available. Until patched, mitigate at the edge: enforce a bounded SETTINGS_MAX_CONCURRENT_STREAMS and HPACK dynamic table/decoded-header-size limit, set aggressive idle/stream-stall timeouts, and consider terminating HTTP/2 at a reverse proxy (nginx, Envoy, Cloudflare) that already caps these amplification vectors in front of h2o. For detection, alert on connections with abnormally low throughput but high decoded-header-state retention, and monitor server memory/CPU for sawtooth patterns correlated with HTTP/2 stream counts. Since this is a pure DoS with no data impact, prioritize patching internet-facing instances first; internal-only deployments behind a stream-limiting WAF are lower urgency.

What systems are affected by CVE-2026-54340?

This vulnerability affects the following AI/ML architecture patterns: model serving, MLOps dashboards/APIs.

What is the CVSS score for CVE-2026-54340?

CVE-2026-54340 has a CVSS v3.1 base score of 7.5 (HIGH). The EPSS exploitation probability is 0.49%.

What is the AI security impact?

Affected AI Architectures

model servingMLOps dashboards/APIs

MITRE ATLAS Techniques

AML.T0029 Denial of AI Service
AML.T0049 Exploit Public-Facing Application

Compliance Controls Affected

EU AI Act: Article 15
ISO 42001: Clause 8.1
NIST AI RMF: MEASURE 2.7
OWASP LLM Top 10: LLM10:2025

What are the technical details?

Original Advisory

h2o is an HTTP server with support for HTTP/1.x, HTTP/2 and HTTP/3. Prior to commit 9265bdd, there is an HTTP/2 state amplification issue that combines HPACK decompression amplification with Slowloris-style stream stalling. Amplified decoded header state can be retained by stalled HTTP/2 streams, and depending on the configuration, additional limits are needed to bound decoded header state and prevent attack. This issue has been fixed by commit 9265bdd.

Exploitation Scenario

An attacker opens many HTTP/2 connections to an internet-facing h2o-served model API and, on each, sends HEADERS frames with highly compressible HPACK-encoded header blocks referencing long dynamic-table entries, while intentionally stalling the stream — never completing the request or sending RST_STREAM. h2o must retain the fully decoded header state for every stalled stream, so the attacker amplifies a small amount of outbound traffic into a large, sustained memory/CPU footprint on the server. Repeated across enough connections, this exhausts server resources and renders the ML inference API or admin UI unresponsive for legitimate users — a low-cost, high-impact Slowloris-style DoS requiring no credentials and no victim interaction.

Weaknesses (CWE)

CWE-400 — Uncontrolled Resource Consumption: The product does not properly control the allocation and maintenance of a limited resource.

  • [Architecture and Design] Design throttling mechanisms into the system architecture. The best protection is to limit the amount of resources that an unauthorized user can cause to be expended. A strong authentication and access control model will help prevent such attacks from occurring in the first place. The login application should be protected against DoS attacks as much as possible. Limiting the database access, perhaps by caching result sets, can help minimize the resources expended. To further limit the potential for a DoS attack, consider tracking the rate of requests received from users and blocking requests that exceed a defined rate threshold.
  • [Architecture and Design] Mitigation of resource exhaustion attacks requires that the target system either: The first of these solutions is an issue in itself though, since it may allow attackers to prevent the use of the system by a particular valid user. If the attacker impersonates the valid user, they may be able to prevent the user from accessing the server in question. The second solution is simply difficult to effectively institute -- and even when properly done, it does not provide a full solution. It simply makes the attack require more resources on the part of the attacker. recognizes the attack and denies that user further access for a given amount of time, or uniformly throttles all requests in order to make it more difficult to consume resources more quickly than they can again be freed.

Source: MITRE CWE corpus.

CVSS Vector

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

Timeline

Published
July 16, 2026
Last Modified
July 17, 2026
First Seen
July 17, 2026

Related Vulnerabilities