CVE-2026-105297: Pingora: HTTP/2 header flood allows remote DoS

HIGH
Published October 20, 2026
CISO Take

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().

Sources:NVDEPSSATLASGitHub Advisory

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?

Initial Access
Attacker opens a single unauthenticated HTTP/2 (h2 or h2c) connection to an exposed Pingora service.
AML.T0049
Exploitation
Attacker sends 1-byte HPACK references to a near-empty header across unlimited concurrent streams, so each stream allocates hundreds of thousands of header fields.
Persistence of Pressure
Attacker uses HTTP/2 flow control to keep the streams open so the memory is never released.
Impact
The process runs out of memory and is OOM-killed, taking down the proxy and the AI services behind it.
AML.T0029

How severe is it?

CVSS 3.1
7.5 / 10
EPSS
0.4%
chance of exploitation in 30 days
Higher than 37% of all CVEs
Exploitation Status
No known exploitation
Sophistication
Trivial

What is the attack surface?

AVACPRUISCIA
AVNetwork
ACLow
PRNone
UINone
SUnchanged
CNone
INone
AHigh

What should I do?

1 step
  1. 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 does CISA's SSVC say?

DecisionTrack
Exploitationnone
AutomatableYes
Technical Impactpartial

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:

ISO 42001
A.6.2.6-AI system operation and monitoring
NIST AI RMF
MANAGE 2.3-Response to unknown risks and mechanisms for deactivation
OWASP LLM Top 10
LLM10-Unbounded Consumption

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

Model serving gatewaysLLM API proxiesInference endpoints behind reverse proxies

MITRE ATLAS Techniques

AML.T0029Denial of AI Service
AML.T0049Exploit Public-Facing Application

Compliance Controls Affected

ISO 42001: A.6.2.6
NIST AI RMF: MANAGE 2.3
OWASP LLM Top 10: LLM10

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-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:H

Timeline

Published
October 20, 2026
Last Modified
October 20, 2026
First Seen
October 20, 2026

Related Vulnerabilities