h2o
CVE-2026-54340
HIGH
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Remote, unauthenticated, low-complexity HTTP/2 request path (AV:N/AC:L/PR:N/UI:N); memory-exhaustion DoS gives A:H with no confidentiality or integrity impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
3DescriptionCVE.org
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.
AnalysisAI
Remote denial of service in the h2o HTTP server (all versions prior to commit 9265bdd) allows unauthenticated attackers to exhaust server memory by combining HPACK header-decompression amplification with Slowloris-style HTTP/2 stream stalling. By opening many streams that stall mid-request, an attacker forces the server to retain large volumes of amplified decoded header state, degrading or crashing the service. There is no public exploit identified at time of analysis, and the CVSS 7.5 (A:H only) reflects an availability-only impact with no confidentiality or integrity effect.
Technical ContextAI
The affected component is h2o's HTTP/2 HPACK decoder (lib/http2/hpack.c). HPACK is the header-compression format for HTTP/2, and it is inherently amplifying: a small compressed field section (using Huffman coding and dynamic-table references) can decode into a much larger set of header fields and bytes. This is a classic CWE-400 (Uncontrolled Resource Consumption) issue. The flaw is that decoded header state was bounded only by soft targets (H2O_MAX_HEADERS=100, H2O_MAX_REQLEN) that functions were expected to tolerate exceeding, with no hard ceiling. When multiple HTTP/2 streams are held open (stalled) simultaneously, each retains its amplified decoded header state, and the aggregate memory across stalled streams is unbounded depending on configuration. The fix in commit 9265bdd introduces H2O_HPACK_MAX_HEADERS_HARD_LIMIT (1000), which raises a hard COMPRESSION error and closes the connection when exceeded, and enforces the H2O_MAX_HEADERS soft cap when adding decoded headers so oversized field sections no longer accumulate unbounded state.
RemediationAI
Upstream fix available (PR/commit); a released patched version is not independently confirmed from the provided data - update h2o to a build that includes commit 9265bdd9a996ed992681055e3996baf3e09d2063, which adds the H2O_HPACK_MAX_HEADERS_HARD_LIMIT (1000) hard cap and enforces the H2O_MAX_HEADERS soft limit in the HPACK decoder. Consult GHSA-qcrr-wrhc-pgq9 (https://github.com/h2o/h2o/security/advisories/GHSA-qcrr-wrhc-pgq9) for the authoritative fixed release. Until you can rebuild or upgrade, compensating controls include tightening HTTP/2 limits in the deployment configuration to bound decoded header state - reduce the maximum concurrent streams per connection and cap request header count/size so stalled streams cannot accumulate unbounded state (trade-off: overly aggressive limits may reject legitimate clients sending many or large headers), and enforce short idle/stream timeouts to reap Slowloris-style stalled streams (trade-off: may prematurely close slow but legitimate mobile clients). Fronting h2o with a reverse proxy or WAF that enforces its own HTTP/2 stream and header limits, or per-IP connection rate limiting, further reduces amplification exposure at the cost of added infrastructure and latency.
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra
A deserialization vulnerability exists in h2oai/h2o-3 versions <= 3.46.0.8, allowing attackers to read arbitrary system
An attacker is able to gain remote code execution on a server hosting the H2O dashboard through it's POJO model import f
H2O.ai H2O through 3.46.0.4 allows attackers to arbitrarily set the JDBC URL, leading to deserialization attacks, file r
In h2oai/h2o-3 version 3.46.0, the `/99/Models/{name}/json` endpoint allows for arbitrary file overwrite on the target s
External Control of File Name or Path in h2oai/h2o-3. Rated high severity (CVSS 8.2), this vulnerability is remotely exp
In h2oai/h2o-3 version 3.46.0.2, a vulnerability exists where uploading and repeatedly parsing a large GZIP file can cau
A vulnerability in the `/3/ParseSetup` endpoint of h2oai/h2o-3 version 3.46.0.1 allows for a denial of service (DoS) att
A vulnerability in the `/3/Parse` endpoint of h2oai/h2o-3 version 3.46.0.1 allows for a denial of service (DoS) attack.
A vulnerability in the `/3/ImportFiles` endpoint of h2oai/h2o-3 version 3.46.1 allows an attacker to cause a denial of s
In h2oai/h2o-3 version 3.46.0.1, the `run_tool` command exposes classes in the `water.tools` package through the `ast` p
Same weakness CWE-400 – Uncontrolled Resource Consumption
View allSame technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today