<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Pingora (&lt; 0.8.1) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/pingora--0.8.1/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Tue, 20 Oct 2026 02:32:34 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/pingora--0.8.1/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Denial of Service via HTTP/2 Resource Exhaustion in Pingora</title><link>https://feed.craftedsignal.io/briefs/2026-10-pingora-dos/</link><pubDate>Tue, 20 Oct 2026 02:32:34 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-10-pingora-dos/</guid><description>A vulnerability in Pingora versions prior to 0.8.1 allows unauthenticated remote attackers to trigger out-of-memory termination via HTTP/2 header-list and stream resource exhaustion.</description><content:encoded><![CDATA[<p>Pingora versions prior to 0.8.1 contain a vulnerability related to the default handling of HTTP/2 protocol limits. The server failed to enforce strict limits on decoded header-list sizes and the number of concurrent streams when specific application-level configurations were omitted. An unauthenticated remote attacker can exploit this by sending crafted 1-byte HPACK references, forcing the server to allocate hundreds of thousands of header fields per stream across an unlimited number of concurrent streams. By manipulating HTTP/2 flow control, an attacker can maintain these streams indefinitely, leading to rapid memory exhaustion. This behavior results in an out-of-memory (OOM) condition, forcing the termination of the Pingora process and resulting in a denial-of-service for the affected service.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker establishes a standard TCP connection to a server running a vulnerable Pingora instance.</li>
<li>Attacker initiates an HTTP/2 handshake (h2 or h2c).</li>
<li>Attacker opens multiple concurrent HTTP/2 streams leveraging the lack of server-side stream limiting.</li>
<li>Attacker sends a series of 1-byte HPACK references directed at a near-empty header field.</li>
<li>The Pingora server allocates massive numbers of header fields per stream to reconstruct the malicious headers.</li>
<li>Attacker uses HTTP/2 flow control mechanisms to keep the malicious streams open and active.</li>
<li>Server memory usage spikes until the operating system triggers an OOM-killer event for the Pingora process.</li>
<li>Service availability is lost for legitimate users.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation results in a remote, unauthenticated denial-of-service. An attacker can crash a Pingora process with significant memory (e.g., 2 GiB) using a single connection. This vulnerability specifically impacts services terminating HTTP/2 traffic that rely on default Pingora configurations without explicitly setting <code>max_header_list_size</code> and <code>max_concurrent_streams</code>.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade all instances of Pingora to version 0.8.1 or later to implement default safety limits.</li>
<li>For applications using custom <code>H2Options</code> that cannot be upgraded, manually configure <code>max_header_list_size</code> and <code>max_concurrent_streams</code> in the application source code immediately.</li>
<li>Developers using Pingora 0.8.1 or later should leverage <code>pingora_core::protocols::http::v2::server::default_h2_options()</code> instead of <code>H2Options::default()</code> to ensure recommended limits are applied.</li>
</ul>
]]></content:encoded><category domain="severity">low</category><category domain="type">advisory</category><category>denial-of-service</category><category>vulnerability</category><category>network</category></item></channel></rss>