CVE-2026-105297: Pingora: HTTP/2 header flood allows remote DoS
HIGHCloudflare's Pingora Rust proxy framework, before 0.8.1, applies no meaningful limits to HTTP/2 header-list size or concurrent streams by default. An unauthenticated remote client can open one connection and send tiny HPACK-compressed header references that expand into hundreds of thousands of header fields per stream, exhausting memory and getting the process OOM-killed (the reporter demonstrated this against a 2 GiB limit). Exploitation likelihood is currently low: EPSS is 0.34% (74th percentile), the CVE is not in CISA KEV, and no public exploit or Nuclei template exists. Even so, the attack is trivial in complexity and the framework is typically deployed at the edge, so any internet-facing AI gateway or inference proxy built on it is exposed. Upgrade to Pingora 0.8.1 or later, and if you pass custom H2Options, set max_header_list_size and max_concurrent_streams explicitly or start from default_h2_options().
What is the risk?
High severity (CVSS 7.5, availability impact only) with network vector, low complexity, and no privileges or user interaction. Real-world exploitation likelihood is currently low (EPSS 0.00338, no KEV listing, no public PoC), but the attack needs only a standard HTTP/2 client and a single connection. Exposure is limited to services that terminate HTTP/2 (h2 or h2c) in Pingora without explicit limits. Pingora is not a tracked AI package, and the AI relevance is indirect, through proxies or gateways fronting ML services.
How does the attack unfold?
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade to pingora 0.8.1 or later, which enforces a 64 KiB decoded header-list limit and at most 100 concurrent streams per connection by default. 2) If the application supplies its own H2Options, set max_header_list_size and max_concurrent_streams explicitly (this also works on versions before 0.8.1), or on 0.8.1+ start from pingora_core::protocols::http::v2::server::default_h2_options(), because H2Options::default() has no limits. 3) Interim: put a hardened HTTP/2-aware load balancer or WAF in front of the service, or disable h2/h2c termination. 4) Set container memory limits and restart policies, and alert on OOM kills, abnormal memory growth, and connections with unusually many open streams.
What does CISA's SSVC say?
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:
Frequently Asked Questions
What is CVE-2026-105297?
Cloudflare's Pingora Rust proxy framework, before 0.8.1, applies no meaningful limits to HTTP/2 header-list size or concurrent streams by default. An unauthenticated remote client can open one connection and send tiny HPACK-compressed header references that expand into hundreds of thousands of header fields per stream, exhausting memory and getting the process OOM-killed (the reporter demonstrated this against a 2 GiB limit). Exploitation likelihood is currently low: EPSS is 0.34% (74th percentile), the CVE is not in CISA KEV, and no public exploit or Nuclei template exists. Even so, the attack is trivial in complexity and the framework is typically deployed at the edge, so any internet-facing AI gateway or inference proxy built on it is exposed. Upgrade to Pingora 0.8.1 or later, and if you pass custom H2Options, set max_header_list_size and max_concurrent_streams explicitly or start from default_h2_options().
Is CVE-2026-105297 actively exploited?
No confirmed active exploitation of CVE-2026-105297 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-105297?
1) Upgrade to pingora 0.8.1 or later, which enforces a 64 KiB decoded header-list limit and at most 100 concurrent streams per connection by default. 2) If the application supplies its own H2Options, set max_header_list_size and max_concurrent_streams explicitly (this also works on versions before 0.8.1), or on 0.8.1+ start from pingora_core::protocols::http::v2::server::default_h2_options(), because H2Options::default() has no limits. 3) Interim: put a hardened HTTP/2-aware load balancer or WAF in front of the service, or disable h2/h2c termination. 4) Set container memory limits and restart policies, and alert on OOM kills, abnormal memory growth, and connections with unusually many open streams.
What systems are affected by CVE-2026-105297?
This vulnerability affects the following AI/ML architecture patterns: Model serving gateways, LLM API proxies, Inference endpoints behind reverse proxies.
What is the CVSS score for CVE-2026-105297?
CVE-2026-105297 has a CVSS v3.1 base score of 7.5 (HIGH). The EPSS exploitation probability is 0.43%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0029Denial of AI ServiceAML.T0049Exploit Public-Facing ApplicationCompliance Controls Affected
What are the technical details?
Original Advisory
Summary Before version 0.8.1, Pingora's HTTP/2 server used the h2 crate's default limits unless the application set its own 16 MiB decoded header-list size and no limit on concurrent streams. A remote, unauthenticated client can send 1-byte HPACK references to a near-empty header, making the server allocate hundreds of thousands of header fields per stream across an unlimited number of streams on one connection, and use HTTP/2 flow control to keep those streams open. This can exhaust memory and degrade or terminate the Pingora process. Impact Remote, unauthenticated denial of service against any Pingora service that terminates HTTP/2 (h2 or h2c) without explicitly setting max_header_list_size and max_concurrent_streams. The reporter showed that a single connection could get a Pingora process with a 2 GiB memory limit OOM-killed. Note that Cloudflare CDN customers were unaffected, as internal Pingora services at Cloudflare do not have HTTP/2 clients. Mitigation: * Upgrade to pingora 0.8.1 or later (fix: https://github.com/cloudflare/pingora/commit/d193c8d49b8b7c1c1ede93183759caa4f6906bbd ). When no H2Options are supplied, Pingora now advertises and enforces a 64 KiB decoded header-list limit and at most 100 concurrent streams per connection. * Applications that supply their own H2Options are not covered by these defaults and must set max_header_list_size and max_concurrent_streams explicitly (this also works on versions before 0.8.1), or, on 0.8.1 and later, start from pingora_core::protocols::http::v2::server::default_h2_options(). H2Options::default() does not include these limits.
Exploitation Scenario
An attacker finds an internet-facing LLM gateway built on Pingora that accepts HTTP/2. They open one connection and send many streams whose HPACK-encoded headers consist of 1-byte references to a near-empty header, so each stream expands to hundreds of thousands of header fields in memory. They use HTTP/2 flow control to keep the streams open, so the memory is not released. Within seconds the proxy is OOM-killed, and inference APIs behind it go offline. The attacker can repeat this whenever the service restarts.
Weaknesses (CWE)
CWE-770Allocation of Resources Without Limits or ThrottlingCWE-770Allocation of Resources Without Limits or ThrottlingCWE-770 — Allocation of Resources Without Limits or Throttling: The product allocates a reusable resource or group of resources on behalf of an actor without imposing any intended restrictions on the size or number of resources that can be allocated.
- [Requirements] Clearly specify the minimum and maximum expectations for capabilities, and dictate which behaviors are acceptable when resource allocation reaches limits.
- [Architecture and Design] Limit the amount of resources that are accessible to unprivileged users. Set per-user limits for resources. Allow the system administrator to define these limits. Be careful to avoid CWE-410.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
Timeline
Related Vulnerabilities
CVE-2026-3366010.0TensorFlow: type confusion NPD in tensor conversion
Same attack type: DoSCVE-2022-359399.8TensorFlow: ScatterNd OOB write enables RCE/crash
Same attack type: DoSCVE-2022-419009.8TensorFlow: heap OOB RCE in FractionalMaxPool op
Same attack type: DoSCVE-2022-235879.8TensorFlow: integer overflow in Grappler enables RCE
Same attack type: DoSCVE-2023-256689.8TensorFlow: unauthenticated RCE via heap buffer overflow
Same attack type: DoS