---
id: CVE-2026-105297
aliases:
  - RUSTSEC-2026-0389
  - GHSA-7gpj-mj4q-x62x
title: >-
  Pingora HTTP/2 server memory exhaustion through unbounded default header-list
  and concurrent-stream limits
summary: >-
  Pingora HTTP/2 server memory exhaustion through unbounded default header-list
  and concurrent-stream limits
severity: high
cvss: 7.5
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'
vendor: pingora-core
product: pingora-core
ecosystem: rust
affected:
  - 'pingora-core >= 0.0.0-0, < 0.8.1'
patched:
  - pingora-core 0.8.1
published: '2026-10-20'
updated: '2026-10-26'
sourceUpdated: '2026-10-26T11:15:11.357540777Z'
source: OSV
sourceUrl: 'https://osv.dev/vulnerability/RUSTSEC-2026-0389'
references:
  - url: 'https://crates.io/crates/pingora-core'
  - url: 'https://rustsec.org/advisories/RUSTSEC-2026-0389.html'
  - url: >-
      https://github.com/cloudflare/pingora/commit/d193c8d49b8b7c1c1ede93183759caa4f6906bbd
  - url: 'https://github.com/cloudflare/pingora'
tags:
  - osv
  - rust
  - cve.org
epss: 0.00429
epssPercentile: 0.37011
ssvc:
  exploitation: none
  automatable: 'yes'
  technicalImpact: partial
  timestamp: '2026-10-20T19:20:25.097096Z'
cvssSource: cna
cwe:
  - CWE-770
ingestedAt: '2026-10-20T01:49:42.629Z'
---

## Overview

Pingora versions prior to 0.8.1 used the h2 crate's default HTTP/2 server limits, a 16 MiB decoded header-list size and no limit on concurrent streams, unless the application set its own. 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.

This affects 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.

This flaw was corrected in 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. Users should upgrade to Pingora >= 0.8.1. Applications that supply their own `H2Options` are not covered by these defaults and must set `max_header_list_size` and `max_concurrent_streams` explicitly, or start from `pingora_core::protocols::http::v2::server::default_h2_options()`. `H2Options::default()` does not include these limits.

Note: Cloudflare CDN customers were unaffected, as internal Pingora services at Cloudflare do not have HTTP/2 clients.

## Affected packages

- `pingora-core >= 0.0.0-0, < 0.8.1`

## Remediation

Upgrade to a patched release:

- `pingora-core 0.8.1`
