<?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/"><channel><title>Netty-Codec-Http2 (4.2.x) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/netty-codec-http2-4.2.x/</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>Fri, 31 Jul 2026 19:29:49 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/netty-codec-http2-4.2.x/feed.xml" rel="self" type="application/rss+xml"/><item><title>Netty HTTP/2 Decompressor Direct Memory Leak</title><link>https://feed.craftedsignal.io/briefs/2026-07-netty-memory-leak/</link><pubDate>Fri, 31 Jul 2026 19:29:49 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-07-netty-memory-leak/</guid><description>A vulnerability in Netty's HTTP/2 decompressor allows an unauthenticated attacker to trigger an uncontrolled memory leak leading to a JVM OutOfMemoryError via crafted HTTP/2 DATA frames.</description><content:encoded><![CDATA[<p>Netty versions 4.1.x and 4.2.x are vulnerable to a direct memory leak (CWE-401) when the <code>DelegatingDecompressorFrameListener</code> is used for HTTP/2 content decompression. The issue occurs within the <code>Http2Decompressor.decompress()</code> method, where an incoming <code>ByteBuf</code> is retained before checking the status of the decompressor channel.</p>
<p>If the decompressor channel has been closed or cleaned up, the <code>writeInbound()</code> call fails with a <code>ClosedChannelException</code>. Because the code does not perform a rollback of the reference count increment in this error path, the buffer is never released. An attacker can exploit this by sending <code>DATA</code> frames for streams that have already reached an <code>END_STREAM</code> state or been cleaned up. Sustained exploitation causes the accumulation of unreferenced direct memory objects, leading to an <code>OutOfMemoryError</code> (DoS) and application crash. This affects users of <code>netty-codec-http2</code> across the 4.1.x and 4.2.x branches.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker establishes a legitimate, long-lived HTTP/2 connection to a vulnerable server.</li>
<li>Attacker initiates a stream and sends data frames to trigger standard decompressor processing.</li>
<li>Attacker sends a final frame to signal <code>END_STREAM</code>, forcing the server to trigger <code>onStreamRemoved</code> and <code>Http2Decompressor.cleanup()</code>.</li>
<li>Attacker continues to send additional <code>DATA</code> frames associated with the now-closed stream.</li>
<li>The <code>DelegatingDecompressorFrameListener</code> calls <code>decompressor.writeInbound(data.retain())</code>.</li>
<li>The <code>EmbeddedChannel.ensureOpen()</code> method throws a <code>ClosedChannelException</code> because the channel is closed.</li>
<li>The catch block in <code>Http2Decompressor</code> fails to call <code>data.release()</code> on the leaked buffer.</li>
<li>The direct memory is leaked; repetition of this process exhausts the heap and crashes the service.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability allows an unauthenticated remote attacker to cause a denial-of-service condition by crashing the JVM. This affects any application utilizing the <code>DelegatingDecompressorFrameListener</code> component within an HTTP/2 pipeline, which is a common pattern for high-performance network services. Repeated exploitation leads to direct memory exhaustion, which is particularly critical in containerized environments with memory limits where the OOM error occurs rapidly.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Upgrade to the latest patched version of <code>netty-codec-http2</code> provided by the Netty Project to remediate CVE-2026-56819.</li>
<li>Implement an application-level rate limit on HTTP/2 streams to detect and disconnect peers that continue to send data after a stream has been closed, which serves as a mitigation until patching can occur.</li>
<li>If patching is not immediately feasible, inspect the <code>DelegatingDecompressorFrameListener</code> implementation and manually apply the rollback logic as documented in the GHSA-93wv-jw9v-4972 advisory to ensure the reference count is decremented on failure.</li>
</ol>
]]></content:encoded><category domain="severity">low</category><category domain="type">advisory</category><category>denial-of-service</category><category>memory-leak</category><category>netty</category><category>cve-2026-56819</category></item></channel></rss>