<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>HTTP/2 on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/http/2/</link>
        <description>Recent content in HTTP/2 on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Thu, 11 Jun 2026 08:43:45 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/http/2/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>How to Handle the HTTP/2 Bomb Vulnerability: Impact and Mitigation for CVE-2026-49975</title>
        <link>https://knightli.com/en/2026/06/11/http2-bomb-cve-2026-49975-mitigation/</link>
        <pubDate>Thu, 11 Jun 2026 08:43:45 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/06/11/http2-bomb-cve-2026-49975-mitigation/</guid>
        <description>&lt;p&gt;&lt;code&gt;HTTP/2 Bomb&lt;/code&gt; is a recently disclosed HTTP/2 denial-of-service risk. It is related to &lt;code&gt;CVE-2026-49975&lt;/code&gt;, and the core issue is that an attacker can send small requests that cause a server to allocate and hold large amounts of memory, eventually slowing the service, pushing it into swap, or making it unavailable.&lt;/p&gt;
&lt;p&gt;This is easy to mistake for &amp;ldquo;just another DDoS.&amp;rdquo; The danger is not high traffic volume. The danger is memory amplification: the client sends little data, while the server may pay a much larger resource cost when handling HTTP/2 header compression and flow-control state.&lt;/p&gt;
&lt;p&gt;For operations and security teams, the first priority is not reproducing the attack. It is identifying where HTTP/2 terminates, then upgrading the relevant components or temporarily disabling HTTP/2.&lt;/p&gt;
&lt;h2 id=&#34;why-it-is-dangerous&#34;&gt;Why It Is Dangerous
&lt;/h2&gt;&lt;p&gt;HTTP/2 Bomb combines two older classes of problems.&lt;/p&gt;
&lt;p&gt;The first is HPACK-related compression amplification. HTTP/2 uses HPACK to compress headers. A client can use very short references that make the server reconstruct and allocate header structures. If an implementation does not sufficiently limit header-field counts, Cookie fragments, or internal bookkeeping overhead, the server may allocate a large amount of memory for a very small input.&lt;/p&gt;
&lt;p&gt;The second is a Slowloris-like hold. The attacker can use HTTP/2 flow control so the server cannot complete its response normally, keeping the previously allocated memory pinned in the process for a long time.&lt;/p&gt;
&lt;p&gt;Individually, neither idea is new. The problem is that when they are chained together, the attack does not need high bandwidth or necessarily a huge number of connections to push backend memory into a dangerous state.&lt;/p&gt;
&lt;h2 id=&#34;components-to-check-first&#34;&gt;Components to Check First
&lt;/h2&gt;&lt;p&gt;Public disclosure has mentioned the following HTTP/2 server implementations as affected or worth checking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nginx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Apache httpd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Microsoft IIS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Envoy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cloudflare Pingora&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NVD currently describes &lt;code&gt;CVE-2026-49975&lt;/code&gt; in relation to Apache HTTP Server &lt;code&gt;mod_http2&lt;/code&gt;, affecting Apache HTTP Server 2.4.17 through 2.4.67. Red Hat also categorizes the related issue as HTTP/2 HPACK denial of service and notes that httpd, nginx, Envoy, and other components need component-specific handling.&lt;/p&gt;
&lt;p&gt;Two details matter here.&lt;/p&gt;
&lt;p&gt;First, not every backend application service is directly exposed. Start by checking HTTP/2 termination points: public load balancers, reverse proxies, Ingress, gateways, CDN origin layers, API gateways, and service-mesh entry points.&lt;/p&gt;
&lt;p&gt;Second, CVE assignment and vendor coverage are not identical across products. Do not assume that one CVE number covers every component you run. Check the actual HTTP/2 component against its vendor or distribution advisory.&lt;/p&gt;
&lt;h2 id=&#34;quick-self-check&#34;&gt;Quick Self-Check
&lt;/h2&gt;&lt;p&gt;Start with this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is HTTP/2 enabled on your public entry points?&lt;/li&gt;
&lt;li&gt;Where does HTTP/2 terminate: CDN, WAF, load balancer, Nginx, Apache, Envoy, IIS, or service mesh?&lt;/li&gt;
&lt;li&gt;Is the terminating component version within the vendor-fixed range?&lt;/li&gt;
&lt;li&gt;Can an upstream proxy limit header-field counts, Cookie fragments, connection lifetime, and per-worker memory?&lt;/li&gt;
&lt;li&gt;Is there any path that bypasses CDN/WAF and connects directly to the origin?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Many sites appear to sit behind a CDN, but origin IPs, backup domains, test domains, admin entries, or canary entries may still expose HTTP/2 directly. What matters is every boundary that can accept HTTP/2, not just the main website domain.&lt;/p&gt;
&lt;h2 id=&#34;fixes-and-mitigations&#34;&gt;Fixes and Mitigations
&lt;/h2&gt;&lt;p&gt;Upgrading should be the first choice.&lt;/p&gt;
&lt;p&gt;For &lt;code&gt;nginx&lt;/code&gt;, public disclosure mentions that &lt;code&gt;1.29.8+&lt;/code&gt; introduced relevant limits. If you cannot upgrade, consider temporarily disabling HTTP/2.&lt;/p&gt;
&lt;p&gt;For &lt;code&gt;Apache httpd&lt;/code&gt;, track the fixed &lt;code&gt;mod_http2&lt;/code&gt; version. Public sources mention &lt;code&gt;mod_http2 v2.0.41&lt;/code&gt; as containing a fix. Red Hat&amp;rsquo;s temporary mitigation is to make affected virtual hosts use only HTTP/1.1:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-apache&#34; data-lang=&#34;apache&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Protocols&lt;/span&gt; http/1.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For &lt;code&gt;nginx&lt;/code&gt;, a temporary mitigation may be to disable HTTP/2 according to vendor or distribution guidance:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;http2&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;off&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For &lt;code&gt;Envoy&lt;/code&gt;, &lt;code&gt;IIS&lt;/code&gt;, &lt;code&gt;Pingora&lt;/code&gt;, or managed gateways, follow the relevant vendor advisory. Do not blindly apply Nginx or Apache configuration assumptions, because the vulnerable limit and fix may differ.&lt;/p&gt;
&lt;p&gt;For systems that cannot be upgraded immediately, consider these defensive controls:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Limit request header-field counts at the edge, including split &lt;code&gt;cookie&lt;/code&gt; fields;&lt;/li&gt;
&lt;li&gt;Limit abnormally long-lived HTTP/2 streams;&lt;/li&gt;
&lt;li&gt;Set limits for HTTP/2 connections, concurrent streams, request rate, and memory;&lt;/li&gt;
&lt;li&gt;Set reasonable memory limits for workers or containers so one process does not drag down the whole host;&lt;/li&gt;
&lt;li&gt;Ensure origins accept traffic only from trusted proxies, preventing WAF/CDN bypass;&lt;/li&gt;
&lt;li&gt;Monitor HTTP/2 connection counts, active streams, memory spikes, swap usage, and 5xx errors.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These controls do not replace patches, but they can reduce exposure during the patch window.&lt;/p&gt;
&lt;h2 id=&#34;higher-risk-scenarios&#34;&gt;Higher-Risk Scenarios
&lt;/h2&gt;&lt;p&gt;Risk is higher in environments such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Publicly exposed Nginx / Apache / Envoy / IIS with HTTP/2 enabled;&lt;/li&gt;
&lt;li&gt;API gateways or Ingress layers with HTTP/2 enabled;&lt;/li&gt;
&lt;li&gt;Origins that can be reached directly around the CDN;&lt;/li&gt;
&lt;li&gt;Small-memory hosts serving multiple sites or services;&lt;/li&gt;
&lt;li&gt;No worker or container memory limits;&lt;/li&gt;
&lt;li&gt;No monitoring for abnormal connections, streams, or memory growth;&lt;/li&gt;
&lt;li&gt;Availability-sensitive services without a quick HTTP/1.1 rollback plan.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even internal-only services should not ignore this. Internal misuse, test scripts, exposed supply-chain components, or service-mesh entry misconfiguration can turn a public-facing issue into an internal availability problem.&lt;/p&gt;
&lt;h2 id=&#34;do-not-focus-only-on-cvss&#34;&gt;Do Not Focus Only on CVSS
&lt;/h2&gt;&lt;p&gt;Scores around this issue can be confusing. Some sources emphasize &lt;code&gt;CVSS 9.8&lt;/code&gt;, while the NVD page currently shows a CISA-ADP CVSS 3.1 score of 7.5 High, and NVD&amp;rsquo;s own assessment is still being enriched.&lt;/p&gt;
&lt;p&gt;For real defense, the score is not the first decision point. Better questions are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is your HTTP/2 entry point affected?&lt;/li&gt;
&lt;li&gt;Is it reachable from the internet?&lt;/li&gt;
&lt;li&gt;Have you upgraded to a vendor-fixed version?&lt;/li&gt;
&lt;li&gt;Can you quickly disable HTTP/2?&lt;/li&gt;
&lt;li&gt;Do you have memory, connection, and stream-level protections?&lt;/li&gt;
&lt;li&gt;Is there any path that bypasses front-end protection and reaches the origin?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If several of these answers are uncertain, treat it as high priority.&lt;/p&gt;
&lt;h2 id=&#34;suggested-operations-order&#34;&gt;Suggested Operations Order
&lt;/h2&gt;&lt;p&gt;Proceed in this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;List all HTTP/2 termination points;&lt;/li&gt;
&lt;li&gt;Check vendor advisories for versions and fix status;&lt;/li&gt;
&lt;li&gt;Upgrade public entry points and edge proxies first;&lt;/li&gt;
&lt;li&gt;Temporarily disable HTTP/2 where upgrades are not yet possible;&lt;/li&gt;
&lt;li&gt;Verify that origins accept only trusted proxy traffic;&lt;/li&gt;
&lt;li&gt;Set memory boundaries for workers, containers, or service processes;&lt;/li&gt;
&lt;li&gt;Add monitoring for HTTP/2 connections, streams, header-field counts, and memory anomalies;&lt;/li&gt;
&lt;li&gt;After the change window, verify that business traffic still works normally.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Disabling HTTP/2 may affect performance, connection reuse, and some client behavior. But when patches are unavailable or exposure is unclear, it is a steadier temporary choice than leaving the edge unprotected.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;The key risk in HTTP/2 Bomb is not &amp;ldquo;how much traffic&amp;rdquo; the attacker sends. It is that a small request can trigger large memory allocation and keep that memory held. That makes it especially dangerous for edge services with HTTP/2 enabled by default.&lt;/p&gt;
&lt;p&gt;Do not start by trying to reproduce it, and do not rely on a single CVE page. First identify every HTTP/2 termination point, then confirm status component by component across Nginx, Apache, Envoy, IIS, Pingora, or your distribution. Upgrade where possible. Where you cannot upgrade, temporarily disable HTTP/2 and add header-field, connection, stream, and memory limits at the edge.&lt;/p&gt;
&lt;p&gt;References: &lt;a class=&#34;link&#34; href=&#34;https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Calif original disclosure&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://nvd.nist.gov/vuln/detail/CVE-2026-49975&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;NVD CVE-2026-49975&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://www.haproxy.com/blog/haproxy-cve-2026-49975-http2-bomb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;HAProxy analysis&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://access.redhat.com/security/vulnerabilities/RHSB-2026-007&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Red Hat RHSB-2026-007&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
