
CVE-2026-23918 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Apache mod_http2 में एक डबल-फ्री कमजोरी है और अप्रमाणित रिमोट कोड निष्पादन को सक्षम बनाता है। इसमें recon, थ्रेडेड HEADERS+RST_STREAM बर्स्ट, और RCE जोखिम स्कोरिंग शामिल है।
प्रभावित: Apache HTTP Server 2.4.66 with mod_http2 + Event MPM
में ठीक किया गया: Apache 2.4.67 (mod_h2 v2.0.37)
CVSS 3.1: 8.8 HIGH — अनधिकृत रिमोट कोड निष्पादन संभव
CWE: CWE-415 (Double Free)
mod_http2 in Apache 2.4.66 के अंदर h2_mplx.c:m_stream_cleanup() में एक डबल-फ्री बग है। समस्या तब होती है जब कोई क्लाइंट उसी स्ट्रीम पर तुरंत RST_STREAM के बाद HEADERS फ्रेम भेजता है। यदि समय सही है, तो स्ट्रीम दो बार m->spurge पर्ज ऐरे में धकेल दी जाती है। जब mplx नष्ट होता है, APR पूल दो बार मुक्त होता है, जो हीप को भ्रष्ट करता है और SIGABRT या SIGSEGV का कारण बनता है।
Apache ने mod_h2 v2.0.37 में add_for_purge() पेश करके इसे ठीक किया, एक सरल डीडुप्लिकेशन जांच जो उसी स्ट्रीम को दो बार जोड़ने से रोकती है।
// Vulnerable (< v2.0.37)
APR_ARRAY_PUSH(m->spurge, h2_stream *) = stream; // can happen twice
// Fixed (v2.0.37+)
static int add_for_purge(h2_mplx *m, h2_stream *stream) {
for (int i = 0; i < m->spurge->nelts; ++i)
if (APR_ARRAY_IDX(m->spurge, i, h2_stream*) == stream)
return FALSE;
APR_ARRAY_PUSH(m->spurge, h2_stream *) = stream;
return TRUE;
}
डिफ़ॉल्ट रूप से स्क्रिप्ट लक्ष्य पर तीन-चरणीय पाइपलाइन चलाती है:
| Phase | What it does |
|---|---|
| 1 — Recon | Apache संस्करण, ALPN के माध्यम से HTTP/2 समर्थन, MPM प्रकार का पता लगाता है |
| 2 — Exploit | थ्रेडेड HEADERS+RST_STREAM बर्स्ट भेजता है, पहले इनलाइन फिर स्टेज्ड मोड आज़माता है |
| 3 — RCE Assessment | क्रैश स्थिरता को मापता है और जोखिम स्तर को स्कोर करता है |
RCE स्कोर तीन संकेतों से गणना की जाती है जो दूरस्थ रूप से पता लगाने योग्य हैं। पहला, क्या Apache 2.4.66 चल रहा है। दूसरा, क्या Event या Worker MPM उपयोग में है (mod_http2 Prefork के साथ शुरू होने से मना करता है, इसलिए यदि HTTP/2 काम करता है, तो यह एक थ्रेडेड MPM है)। तीसरा, क्रैश कितना निर्धारक है — पहले दौर में क्रैश का मतलब है कि हीप भ्रष्टाचार नियंत्रित और पुन: उत्पन्न करने योग्य है, जो RCE के लिए आवश्यक है।
pip install hpack requests
# Full PoC on a single target (default behavior)
python poc.py -t 192.168.1.100
# Increase pressure with more rounds, bigger bursts and more threads
python poc.py -t 192.168.1.100 -n 20 -b 500 -w 5
# Passive check only, nothing is sent to the target
python poc.py -t example.com --check-only
# Scan a whole list of targets
python poc.py -l sites.txt -o results.json
# Passive check on a list
python poc.py -l sites.txt --check-only
# Generate a Markdown report after the run
python poc.py -t target.com --report report.md
# one target per line, comments are ignored
192.168.1.100
example.com
example.com:8443
https://example.com
http://example.com:8080
सही समाधान Apache को 2.4.67 या बाद के संस्करण में अपग्रेड करना है। यदि आप तुरंत अपग्रेड नहीं कर सकते, तो HTTP/2 को अक्षम करना पूरी तरह से हमले की सतह को हटा देता है:
# Before
Protocols h2 http/1.1
# After (disables HTTP/2)
Protocols http/1.1
यह उपकरण केवल अधिकृत सुरक्षा परीक्षण और शोध के लिए है। किसी भी लक्ष्य के विरुद्ध इसे चलाने से पहले सुनिश्चित करें कि आपके पास स्पष्ट लिखित अनुमति है। लेखक दुरुपयोग के लिए कोई जिम्मेदारी नहीं लेता है।
| Flag | Default | Description |
|---|
-t | — | एकल लक्ष्य (होस्टनाम या IP) |
-l | — | लक्ष्यों वाली फ़ाइल, प्रति पंक्ति एक |
-p | 443 | पोर्ट |
-n | 10 | एक्सप्लॉइट राउंड की संख्या |
-b | 200 | प्रति राउंड HEADERS+RST जोड़े |
-w | 3 | प्रति राउंड समानांतर कनेक्शन |
-d | 0.1 | राउंड के बीच विलंब सेकंड में |
-m | inline | हमला मोड: inline या staged |
--no-tls | — | TLS के बजाय h2c का उपयोग करें |
--check-only | — | केवल निष्क्रिय रिकॉन, कोई एक्सप्लॉइट नहीं |
-o | — | परिणामों को JSON फ़ाइल में सहेजें |
--report | — | एक Markdown रिपोर्ट उत्पन्न करें |
-v | — | विस्तृत आउटपुट |
| Level | What it means |
|---|
| CRITICAL | 2.4.66 की पुष्टि, HTTP/2 सक्रिय, Event MPM का पता चला, क्रैश निर्धारक — अभी पैच करें |
| HIGH | 2.4.66 की पुष्टि, HTTP/2 सक्रिय, थ्रेडेड MPM उपयोग में |
| MEDIUM | 2.4.66 का पता चला लेकिन HTTP/2 या क्रैश की अभी पुष्टि नहीं हुई |
| LOW | संस्करण मेल नहीं खाता या कोई HTTP/2 नहीं मिला |
| NONE | पहले से ही 2.4.67+ पर पैच किया गया या प्रभावित नहीं |