
CVE-2026-42945 (NGINX Rift) के लिए केवल-पहचान स्कैनर, ngx_http_rewrite_module में एक हीप ओवरफ़्लो। संस्करण पहचान + nginx.conf पैटर्न विश्लेषण। Python 3 केवल stdlib, कोई नेटवर्क कॉल नहीं।
| जाँच | कैसे |
|---|
| संस्करण | nginx -V, dpkg/rpm/apk, Dockerfile/compose इमेज टैग |
| कॉन्फ़िग पैटर्न | nginx.conf + सभी include की गई फ़ाइलों का ब्रेस-जागरूक पार्स |
| संस्करण | असुरक्षित | सुरक्षित |
|---|---|---|
| NGINX OSS | 0.6.27 – 1.30.1 | 1.31.0+ (या 1.30.1 पैच किया गया) |
| NGINX Plus | R32, R32P6 से पहले | R32P6+ |
| NGINX Plus | R36, R36P4 से पहले | R36P4+ |
| NGINX Plus | R37+ | अप्रभावित |
1.30.1 पर ध्यान दें: पैच किया गया 1.30.1 स्थिर बिल्ड उसी संस्करण स्ट्रिंग को रिपोर्ट करता है जो असुरक्षित संस्करण करता है, इसलिए स्कैनर किसी भी 1.30.1 को
POTENTIALLY_VULNERABLE(एग्ज़िट कोड 1, रूढ़िवादी) के रूप में वर्गीकृत करता है। पैकेज चेंजलॉग / परामर्श बैकपोर्ट की जाँच करें कि पैच लागू किया गया है या नहीं।
एक स्कोप ब्लॉक तब चिह्नित किया जाता है जब तीनों शर्तें पूरी होती हैं:
rewrite, if, या set निर्देश एक अनाम PCRE कैप्चर संदर्भ ($1–$9, ब्रेस फ़ॉर्म ${1}–${9} सहित) का उपयोग करता है।? वर्ण होता है (rewrite/set के लिए regex-पैटर्न तर्क बाहर रखा गया है — वहाँ ? एक PCRE क्वांटिफ़ायर है; if शर्तों को रूढ़िवादी रूप से स्कैन किया जाता है)।rewrite/if/set निर्देश उसी स्कोप में अनुसरण करता है (इन्क्लूड को शामिल करने वाले स्कोप में जोड़ा जाता है, इसलिए include सीमा को पार करने वाले जोड़े का पता लगाया जाता है)।# Clone and run
git clone https://github.com/simota/nginx-rift-scanner.git
cd nginx-rift-scanner
# Scan local nginx (binary in PATH, config at /etc/nginx/nginx.conf)
python3 scripts/scan_nginx_rift.py
# Custom paths
python3 scripts/scan_nginx_rift.py \
--nginx-binary /usr/sbin/nginx \
--config /etc/nginx/nginx.conf \
--prefix /etc/nginx \
--scan-dir /app
# JSON output (CI / SIEM)
python3 scripts/scan_nginx_rift.py --json
# Validate with included fixtures
python3 scripts/scan_nginx_rift.py --config fixtures/vulnerable.nginx.conf
python3 scripts/scan_nginx_rift.py --config fixtures/safe.nginx.conf
एग्ज़िट कोड: 0 = साफ़, 1 = असुरक्षित / संभावित रूप से असुरक्षित संस्करण या कॉन्फ़िग पैटर्न चिह्नित।
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
--nginx-binary PATH | nginx | nginx निष्पादन योग्य का पथ |
--config PATH | /etc/nginx/nginx.conf | स्कैन करने के लिए रूट nginx कॉन्फ़िग |
--prefix PATH | --config की निर्देशिका | सापेक्ष include पथों को हल करने के लिए उपयोग किया जाने वाला nginx कॉन्फ़िगरेशन उपसर्ग (nginx उन्हें उपसर्ग के विरुद्ध हल करता है, शामिल करने वाली फ़ाइल की निर्देशिका के विरुद्ध नहीं) |
--scan-dir PATH | . | Dockerfiles/compose फ़ाइलों की खोज करने के लिए निर्देशिका |
--json | — | stdout पर JSON रिपोर्ट भेजें |
अपग्रेड (पसंदीदा):
कार्य-समाधान — प्रत्येक rewrite/if/set निर्देश में जिसमें ? भी है, अनाम कैप्चर को नामित कैप्चर से बदलें:
# Vulnerable
rewrite ^/api/(\w+)$ /new-api?path=$1 last;
# Safe
rewrite ^/api/(?<action>\w+)$ /new-api?path=$action last;
कॉन्फ़िग निष्कर्ष अनुमानात्मक हैं। एक चिह्नित निर्देश शोषणक्षमता की गारंटी नहीं देता — ? URI-निर्माण पथ में नहीं हो सकता है, या कैप्चर संदर्भ उस आवंटन के साथ इंटरैक्ट नहीं कर सकता जो ओवरफ़्लो करता है। उपचार को प्राथमिकता देने से पहले प्रत्येक निष्कर्ष की मानव द्वारा समीक्षा की जानी चाहिए।
nginx बाइनरी (वैकल्पिक — अनुपस्थित होने पर संस्करण जाँच छोड़ दी जाती है)| फ़ाइल | अपेक्षित परिणाम |
|---|---|
fixtures/vulnerable.nginx.conf | 3 कॉन्फ़िग निष्कर्ष, एग्ज़िट कोड 1 |
fixtures/safe.nginx.conf | 0 कॉन्फ़िग निष्कर्ष, एग्ज़िट कोड 0 |
python3 -m unittest discover -s tests -v