
CVE-2026-42945 का विश्लेषण करता है, जो NGINX rewrite heap overrun है, जो एक डिफरेंशियल डिटेक्टर, निर्धारित DoS PoC, और सत्यापन के साथ एक श्रेय प्राप्त RCE पोर्ट प्रदान करता है।
CVE-2026-42945 (CVSS 4.0 9.2 CRITICAL) पर सुरक्षा अनुसंधान: NGINX के स्क्रिप्ट इंजन में एक हीप बफर ओवररन, जहां रिप्लेसमेंट में तर्कों के साथ एक rewrite (जैसे rewrite ^(.*) /new?c=1;) इंजन का is_args फ्लैग सेट छोड़ देता है और उसे कभी साफ़ नहीं करता — इसलिए बाद में set/if में मूल्यांकित कोई भी कैप्चर ($1) URI एस्केपिंग के साथ एक ऐसे बफर में कॉपी किया जाता है जो अनएस्केप्ड लंबाई के लिए आकार दिया गया था। किसी भी क्लाइंट द्वारा प्री-ऑथ पहुंच योग्य जिसके अनुरोध URI में %XX एस्केप या + हो।
परिणाम (चरण 1): एक सुरक्षित डिफरेंशियल डिटेक्टर (कमजोर 1.30.0 बनाम फिक्स्ड 1.30.1, शून्य क्रैश) साथ ही एक (SIGSEGV, कोर डंप — प्रतिक्रिया पहले पूरी तरह से परोसी जाती है)। दोनों को कमिट पर स्रोत से संकलित बिल्ड के विरुद्ध पुनरुत्पादित किया गया।
71d62c6परिणाम (चरण 2): रिपोर्टर के RCE का एक क्रेडिटेड पोर्ट — वर्कर उपयोगकर्ता (nobody) के रूप में system() निष्पादन, lab/rce/ के अंतर्गत पुनरुत्पादित रिपोर्टर के पिन किए गए बिल्ड के विरुद्ध 3/3 स्वच्छ रन में पुनरुत्पादित। शोषण तकनीक लियो लिन (DepthFirst) की है; यहां मूल क्या है बनाम पूर्व कार्य और राइटअप का पूर्व कार्य देखें।
| दावा | साक्ष्य |
|---|---|
| मूल कारण फिक्स कमिट से प्राप्त (ब्लॉग से नहीं) | finding-sheet |
फिक्स एक-पंक्ति है — ngx_http_script_regex_end_code() में e->is_args = 0; | कमिट 524977e (writeup में उद्धृत) |
| सुरक्षित डिटेक्टर: कमजोर बनाम फिक्स्ड ओरेकल, शून्य क्रैश | poc/diagnose.py — ट्रंकेशन फिंगरप्रिंट (/foo%25b बनाम /foo%bar) |
| ट्रिगर मैट्रिक्स: उद्धृत/प्लस URI और कैप्चर में एस्केप करने योग्य वर्ण — दोनों आवश्यक | poc/diagnose.py प्रोब बैटरी incl. /a%41b नियंत्रण |
| निर्धारक वर्कर DoS (SIGSEGV, कोर डंप, प्रतिक्रिया पहले परोसी गई) | poc/crash.py — X-Worker-PID परिवर्तन वर्कर की मृत्यु साबित करता है |
| फिक्स्ड 1.30.1 समान हमले से बच जाता है | poc/crash.py --host 127.0.0.1:29544 — 3/3 राउंड बच गए |
| RCE (चरण 2, रिपोर्टर की तकनीक, क्रेडिटेड पोर्ट) | exploit/rce.py — 3/3 रन, प्रमाण फ़ाइल + uid=65534(nobody), निष्पादन के बाद वर्कर exited on signal 11 |
# डिफरेंशियल जोड़ी: nginx 1.30.0 (:29543) + 1.30.1 (:29544) स्रोत से निर्मित
cd lab && docker compose up -d --build && cd ..
python3 poc/diagnose.py # सुरक्षित ओरेकल — कभी भी किसी वर्कर को क्रैश नहीं करता
python3 poc/crash.py --host 127.0.0.1:29543 # 1.30.0: वर्कर सिग्नल 11 पर मर जाता है, कोर डंप
python3 poc/crash.py --host 127.0.0.1:29544 # 1.30.1: हर राउंड से बच जाता है
docker logs cve-42945-vuln 2>&1 | grep 'exited on signal' | tail -3
चरण 2 — रिपोर्टर के पिन किए गए बिल्ड के विरुद्ध RCE (nginx dev rev
98fc3bb7 = release-1.29.8-14, पिन किए गए एंट्रीपॉइंट द्वारा ASLR अक्षम):
docker compose -f lab/rce/docker-compose.yml up -d --build # :29545, निर्माण में मिनट लगते हैं
python3 exploit/rce.py \
--cmd 'echo pwned-by-cve-2026-42945 > /tmp/proof' --verify --expect pwned
docker compose -f lab/rce/docker-compose.yml exec nginx cat /tmp/proof
| दस्तावेज़ | यह क्या है |
|---|---|
| docs/finding-sheet.md | एक-पृष्ठ डेटाशीट: संस्करण, CVSS, कॉन्फ़िग पैटर्न, ट्रिगर शर्तें, पहचान हस्ताक्षर |
| docs/report-ptes.md | PTES-संरचित रिपोर्ट (7 चरण), जो वास्तव में किया गया था उस तक सीमित |
| docs/research-writeup.md | जांच कथा — फिक्स-कमिट पुरातत्व, ट्रंकेशन आश्चर्य, पोर्टेबल पाठ, भविष्य का कार्य |
चरण-1 अनुसंधान श्रृंखला मूल कार्य है: क्रैश-मुक्त डिफरेंशियल ओरेकल और इसका ट्रंकेशन फिंगरप्रिंट (परोसा गया बॉडी कच्ची लंबाई तक ट्रंकेटेड पुनः-एस्केप्ड कैप्चर है — लंबाई/मान दो-पास बेमेल का दृश्य हस्ताक्षर), ट्रिगर मैट्रिक्स जो दोनों पूर्वशर्तों को आवश्यक साबित करता है, स्रोत-स्तर की व्याख्या कि क्यों लंबाई पास is_args नहीं देख सकता, और निर्धारक पोस्ट-प्रतिक्रिया वर्कर हत्या। बग स्वयं, कमजोर कॉन्फ़िग पैटर्न, और फिक्स-कमिट विश्लेषण रिपोर्टर और अपस्ट्रीम का पूर्व कार्य है — लियो लिन (DepthFirst) ने मुद्दे का खुलासा किया और रोमन अरुत्युन्यान ने इसे ठीक किया; राइटअप का पूर्व कार्य अनुभाग और
DepthFirst Disclosures — Nginx-Rift,
ट्री CVE-2026-42945 देखें।
चरण 2 (RCE) रिपोर्टर के प्रकाशित शोषण का पोर्ट है, स्वतंत्र श्रृंखला नहीं: क्रॉस-अनुरोध हीप फेंग शुई जो ओवररन को आसन्न अनुरोध पूल के cleanup पॉइंटर पर उतारता है, धारित POST बॉडी के माध्यम से नकली ngx_pool_cleanup_t स्प्रे, libc system() के लिए क्लीनअप-डिस्पैच रीडायरेक्ट, ओवरफ्लो ज्यामिति (349 A + 969 + + 6 लक्ष्य बाइट्स), नो-ASLR बेस/ऑफसेट स्थिरांक, और lab/rce/ में पिन किया गया बिल्ड (उनका env/) सभी लियो लिन का डिज़ाइन है, जिसे exploit/rce.py में क्रेडिट के साथ पुनरुत्पादित किया गया है। चरण 2 में हमारा: पोर्ट स्वयं — इस रिपॉजिटरी की CLI/लॉगिंग/सत्यापन परंपराएं, लाइव हीप-स्कैन उम्मीदवार खोज और बेस ऑटोडिटेक्शन (उनके स्थिर स्थिरांक कर्नेल-निर्भर हैं; शोषण डॉकस्ट्रिंग देखें), stdlib रिवर्स-शेल लिस्टनर, और सत्यापन साक्ष्य।
यह रिपॉजिटरी अपनी पद्धति को CVE-2026-42533 — NGINX प्री-ऑथ हीप ओवरफ्लो: विश्लेषण और RCE (सहयोगी रिपॉजिटरी) के साथ साझा करती है: nginx स्क्रिप्ट इंजन में समान दो-पास लंबाई/मान बग वर्ग, जिसे वहां पूर्ण प्री-ऑथ RCE श्रृंखला के माध्यम से ले जाया गया। उस श्रृंखला ने इस बग के लिए संभावित सीमा निर्धारित की; इस रिपॉजिटरी का चरण 2 यहां समान सीमा तक पहुंचता है — रिपोर्टर की तकनीक के क्रेडिटेड पोर्ट के रूप में, स्वतंत्र श्रृंखला नहीं।
docs/ फाइंडिंग शीट · PTES रिपोर्ट · अनुसंधान राइटअप
poc/ diagnose.py (सुरक्षित डिफरेंशियल ओरेकल) · crash.py (निर्धारक DoS)
exploit/ rce.py — रिपोर्टर की system() श्रृंखला का क्रेडिटेड पोर्ट
lab/ Dockerfile (nginx स्रोत से, -g -O0) + डिफरेंशियल कंपोज़ जोड़ी
lab/nginx/ vulnerable.conf — फिक्स कमिट से PoC कॉन्फ़िग
lab/rce/ रिपोर्टर का पिन किया गया RCE वातावरण (उनका env/, हमारा पोर्ट मैपिंग)
524977e7c534
"Rewrite: fixed escaping and possible buffer overrun" (रोमन अरुत्युन्यान) — nginx 1.30.1 में जारीCVE-2026-42945 (रिपोर्टर का पूर्व कार्य; लियो लिन)शैक्षिक अनुसंधान कलाकृति। केवल उन प्रणालियों के विरुद्ध चलाएं जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आप स्पष्ट रूप से अधिकृत हैं। कमजोरी पैच की गई है — nginx को ≥ 1.30.1 में अपग्रेड करें।