Description
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.
Published: 2026-10-20
Score: 7.5 High
EPSS: n/a
KEV: No
Impact: Remote, unauthenticated denial of service via memory exhaustion
Action: Apply patch
AI Analysis

Impact

Pingora’s HTTP/2 server defaulted to 16 MiB decoded header-list size and no limit on concurrent streams before version 0.8.1, allowing a remote client to send minimal HPACK references that trigger the allocation of hundreds of thousands of header fields per stream. With HTTP/2 flow control keeping the streams open, an attacker can exhaust server memory and force the process to OOM‑kill. The vulnerability results in denial of service for any Pingora instance that does not explicitly set max_header_list_size and max_concurrent_streams. This can compromise confidentiality, integrity, and availability of services exposed via HTTP/2 (h2 or h2c).

Affected Systems

Cloudflare’s Pingora HTTP/2 server library, versions preceding 0.8.1, or any application that incorporates Pingora without configuring the H2Options limits. Cloudflare CDN customers are unaffected because internal services that use Pingora do not accept HTTP/2 connections from clients.

Risk and Exploitability

The CVSS score of 7.5 classifies the weakness as high severity. EPSS is not available, and the vulnerability is not listed in CISA KEV, indicating no publicly confirmed exploitation yet. The likely attack vector is an unauthenticated remote client that initiates an HTTP/2 connection to a Pingora‑powered service. Exploitation requires no privileged access or prior credentials and can be performed by sending a crafted stream of small HPACK references to trigger memory allocation. Once the memory threshold is reached, the process crashes, resulting in a denial of service.

Generated by OpenCVE AI on October 20, 2026 at 06:03 UTC.

Remediation

Vendor Solution

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.


OpenCVE Recommended Actions

  • Upgrade to Pingora 0.8.1 or later so that the library advertises and enforces a 64 KiB decoded header‑list limit and a maximum of 100 concurrent streams per connection.
  • If your application supplies custom H2Options, set max_header_list_size and max_concurrent_streams explicitly—use pingora_core::protocols::http::v2::server::default_h2_options() as a baseline; H2Options::default() does not enforce limits.
  • Configure network or application‑level throttling to restrict the number of simultaneous HTTP/2 streams or reject connections that exceed reasonable header‑list sizes when upgrading is delayed.

Generated by OpenCVE AI on October 20, 2026 at 06:03 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

References
History

Tue, 20 Oct 2026 01:15:00 +0000

Type Values Removed Values Added
Description 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.
Title Pingora HTTP/2 server memory exhaustion through unbounded default header-list and concurrent-stream limits
Weaknesses CWE-770
References
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: cloudflare

Published:

Updated: 2026-10-20T00:40:27.300Z

Reserved: 2026-10-05T04:18:56.102Z

Link: CVE-2026-105297

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-20T01:17:09.613

Modified: 2026-10-20T01:17:09.613

Link: CVE-2026-105297

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-20T06:15:10Z

Weaknesses
  • CWE-770

    Allocation of Resources Without Limits or Throttling