
ASLR-स्वतंत्र nginx RCE चेन PoC जो स्टॉक nginx पर system() तक पहुँचने के लिए PoolSlip heap over-read leak (CVE-2026-9256) को rift overflow (CVE-2026-42945) के साथ जोड़ती है।
हाल ही में प्रकट किए गए दो nginx rewrite-engine बग्स की पहली सार्वजनिक चेन, जो स्टॉक आधिकारिक nginx:1.30.0 Docker इमेज (Debian 13, glibc 2.41) पर एकल ASLR-स्वतंत्र रिमोट system() में बदलती है — कोई हार्डकोडेड एड्रेस नहीं, कोई nginx रीस्टार्ट नहीं, प्रति नए वर्कर ~90 % सफलता।
$args हीप ओवर-रीड → लाइव libc + heap लीक करता है।is_args हीप ओवरफ़्लो (केवल URL-सुरक्षित बाइट्स) → एक limit_conn क्लीनअप पॉइंटर का 2-बाइट आंशिक ओवरराइट → ngx_destroy_pool उस पर चलता है → system(cmd)।दोनों एक ही is_args टू-पास मिसमैच हैं जो दो सिंक्स पर निशाना साधते हैं। पूरा तकनीकी लेख: Writeup
डिस्क्लोज़र और सुरक्षा
- दोनों CVE पहले से पैच किए जा चुके हैं और जंगल में सक्रिय रूप से शोषित हैं। nginx 1.30.2 (stable) या 1.31.1 (mainline) पर अपग्रेड करें — ध्यान दें कि
1.30.1rift को ठीक करता है लेकिन अभी भी PoolSlip के प्रति असुरक्षित है, इसलिए केवल1.30.2दोनों को बंद करता है। NGINX Plus: R36 P5 / R32 P7 / R37.0.1.1।- यह केवल शिक्षा और अधिकृत परीक्षण के लिए प्रकाशित किया गया है। यह बंडल किए गए स्थानीय Docker लैब के विरुद्ध चलता है — इसे उस इंफ्रास्ट्रक्चर पर निशाना न बनाएं जिसका आप स्वामी नहीं हैं या जिसके परीक्षण की आपके पास लिखित अनुमति नहीं है।
| CVE | उपनाम | असुरक्षित | ठीक किया गया (nginx OSS) |
|---|---|---|---|
| CVE-2026-42945 | rift | 0.6.27 – 1.30.0 | 1.30.1 / 1.31.0 |
| CVE-2026-9256 | PoolSlip | 0.1.17 – 1.30.1 + 1.31.0 | 1.30.2 / 1.31.1 |
| फ़ाइल | उद्देश्य |
|---|---|
nginx.conf | एक विश्वसनीय API-गेटवे कॉन्फ़िग (यह लक्ष्य है — limit_conn, एक v1→v2 माइग्रेशन rewrite, एक अपलोड प्रॉक्सी, एक डिग्रेडेड सर्च पेज)। कोई एलोकेटर ट्यूनिंग नहीं। |
run.sh | स्थानीय लैब खड़ी करता है: स्टॉक nginx:1.30.0 जो nginx.conf सर्व करता है, साथ में एक स्लो अपस्ट्रीम, होस्ट :19322 पर। |
exp_official.py | पूरी चेन: PoolSlip लीक → libc/heap निकालें → स्प्रे → ग्रूम → rift आंशिक ओवरराइट → system()। |
exp_official.py चलाने के लिए), curl, Linux x86-64।run.sh स्लो अपस्ट्रीम के लिए perl (जो स्टॉक nginx इमेज में पहले से है) का उपयोग करता है, इसलिए कोई अतिरिक्त पैकेज नहीं, कोई slow_backend फ़ाइल नहीं, और इंटरनेट की आवश्यकता नहीं। nginx बाइनरी स्वयं स्टॉक रहती है।WRITEUP.md में gdb सत्रों का अनुसरण करने के लिए, docker exec करें और apt-get install gdb file binutils, फिर gef लोड करें।git clone https://github.com/y198nt/Nginx-chain-Rift-Poolslip
cd Nginx-chain-Rift-Poolslip
bash run.sh # stock nginx:1.30.0 on http://127.0.0.1:19322
python3 exp_official.py --cmd 'id > /tmp/rce_proof' # leak → overwrite → system()
docker exec nginx-rift-official cat /tmp/rce_proof # → uid=101(nginx) ...
exp_official.py वन-शॉट है (प्रति नए वर्कर ~90 %): यह एक बार लीक करता है और एक बार फ़ायर करता है। यदि प्रूफ़ फ़ाइल खाली है, तो ग्रूम एक स्लॉट दूर पड़ा — बस इसे दोबारा चलाएँ।
docker rm -f nginx-rift-official # tear the lab down
rewrite ^/search/((.*))$ /lookup?$1$2 कॉपी पास को r->args.len को बफ़र से आगे सेट करवाता है; डिग्रेडेड /search पेज $args को आसन्न हीप में रिफ्लेक्ट करता है। एक छोटे वार्म-अप के बाद, एक libpcre-cluster पॉइंटर (libc से नीचे निश्चित 0xb0ad08) और एक हीप पॉइंटर स्थिर ऑफ़सेट पर बैठ जाते हैं → libc_base और heap_base, कुछ भी हार्डकोडेड नहीं।limit_conn क्लीनअप पॉइंटर के केवल निम्न 2 बाइट्स को ओवरराइट करते हैं — ASLR-रैंडम उच्च बाइट्स बिना छुए साथ चलती हैं → ASLR-स्वतंत्र।ngx_pool_cleanup_t{handler=&system, data=cmd, next=0} में रीडायरेक्ट किया जाता है; विक्टिम को बंद करने पर ngx_destroy_pool का क्लीनअप वॉक ट्रिगर होता है → system(cmd)।पूरी व्युत्पत्ति, gdb सत्रों, और डेड-एंड्स/पिवट्स के लिए Writeup देखें।
rewrite के माध्यम से फ़ायर होता है जिसके रिप्लेसमेंट में ? हो और जो एक PCRE कैप्चर ($1/$2) को संदर्भित करता हो, या ^/x/((.*))$ → /y?$1$2 जैसे नेस्टेड-कैप्चर पैटर्न में। कॉन्फ़िग्स में इनका ऑडिट करें और पैच होने तक आपत्तिजनक rewrite/set को पुनः कार्यान्वित करें।$args (या कोई भी रिक्वेस्ट-व्युत्पन्न वेरिएबल जो वापस इको होता है) ही ओवर-रीड को इन्फो-लीक में बदलता है — रिक्वेस्ट आर्ग्स को शब्दशः रिफ्लेक्ट न करें।%2B/+ फ़्लड (GET /search/+++…), एक डिग्रेडेड पेज से लंबे $args को इको करते हुए 503s, और वर्कर SIGSEGV/रीस्पॉन स्टॉर्म।