CVE-2026-105297 in pingorainfo

Summary

by MITRE • 10/20/2026

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.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Analysis

by VulDB Data Team • 10/20/2026

The vulnerability identified in Pingora versions prior to 0.8.1 represents a critical resource exhaustion flaw within the HTTP/2 server implementation, specifically stemming from insufficient configuration of header compression and stream management parameters. The root cause lies in the reliance on default settings provided by the underlying h2 crate when no explicit application-level constraints are defined. By failing to enforce strict limits on the decoded header-list size and concurrent streams, the service becomes susceptible to a sophisticated denial-of-service attack that exploits the mechanics of HPACK compression and HTTP/2 flow control. This flaw allows an unauthenticated remote attacker to manipulate server resources efficiently, leading to significant performance degradation or complete process termination without requiring any form of authentication or prior interaction with the system.

From a technical perspective, the exploitation vector involves sending carefully crafted 1-byte HPACK references that point to entries in a nearly empty header table. In standard HTTP/2 operations, such small headers are efficient; however, under vulnerable conditions where limits are absent, these references can trigger the server to allocate hundreds of thousands of actual header fields per stream. Because there is no cap on the number of concurrent streams allowed on a single connection, an attacker can open and maintain numerous streams simultaneously using HTTP/2 flow control mechanisms. This strategy ensures that the server continues to process requests without sending GOAWAY frames or resetting connections prematurely, thereby sustaining the memory pressure over time. The cumulative effect of allocating massive amounts of header data across many active streams rapidly consumes available system memory.

The operational impact of this vulnerability is severe, resulting in a remote denial-of-service condition for any Pingora service that terminates HTTP/2 traffic using either h2 or cleartext h2c protocols without explicit configuration safeguards. The severity is underscored by proof-of-concept demonstrations showing that a single client connection can cause a Pingora process with a modest 2 GiB memory limit to be out-of-memory killed by the operating system. This effectively takes down the proxy service, disrupting all downstream traffic routed through it. It is important to note that Cloudflare CDN customers were not affected by this specific issue because their internal Pingora services do not expose HTTP/2 client interfaces to external networks, thereby isolating them from this attack vector despite running vulnerable software versions internally.

This vulnerability aligns with CWE-787: Out-of-bounds Write and CWE-400: Uncontrolled Resource Consumption, as the flaw allows an attacker to consume system resources beyond intended limits through unbounded allocation of header fields and streams. In terms of offensive security frameworks, this behavior is consistent with ATT&CK technique T1496: Resource Hijacking, where adversaries use computing resources for their own benefit or to disrupt availability by exhausting server capacity. The attack does not involve data exfiltration or code execution but focuses purely on service disruption through resource exhaustion, highlighting the importance of proper configuration management in high-performance proxy servers that handle large volumes of concurrent connections.

To mitigate this vulnerability, organizations must upgrade Pingora to version 0.8.1 or later, which introduces robust default security configurations for HTTP/2 handling. The updated versions enforce a strict limit on the decoded header-list size at sixty-four kilobytes and restrict the number of concurrent streams per connection to one hundred. These defaults prevent the massive allocation patterns exploited by attackers while maintaining compatibility with standard web traffic. For environments that require custom HTTP/2 options, it is imperative to explicitly set max_header_list_size and max_concurrent_streams in any H2Options configuration. Developers should avoid using H2Options::default() as it does not include these critical security limits; instead, they should start from pingora_core::protocols::http::v2::server::default_h2_options(), which incorporates the necessary safeguards by default. This ensures that even custom configurations retain baseline protections against resource exhaustion attacks.

Responsible

Cloudflare

Reservation

10/05/2026

Disclosure

10/20/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

very low

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!