
अपने NGINX कॉन्फ़िगरेशन को स्कैन करें ताकि यह निर्धारित किया जा सके कि यह CVE-2026-42945 से प्रभावित है या नहीं।
NGINX कॉन्फ़िगरेशन फ़ाइलों के लिए स्थैतिक स्कैनर जो CVE-2026-42945 से जुड़े rewrite/set पैटर्न का पता लगाता है।
यह स्कैनर crossplane के साथ NGINX कॉन्फ़िगरेशन को पार्स करता है, location ब्लॉकों पर चलता है, और प्रभावित प्रतीत होने वाले प्रत्येक स्थान को इस प्रारूप में प्रिंट करता है:
/<path-to>/xxx.conf:<line-number> -> location XXXXX
उदाहरण:
/path/to/nginx.conf:39 -> location ~ ^/api/(.*)$
संदर्भ: CVE-2026-42945-POC.
निर्भरताओं का प्रबंधन uv द्वारा pyproject.toml में किया जाता है और uv.lock में लॉक किया जाता है। एकमात्र रनटाइम निर्भरता है।
crossplaneरिपॉजिटरी रूट से:
uv sync
आप अलग सेटअप चरण को छोड़ सकते हैं और uv run को पहले उपयोग पर वातावरण बनाने दे सकते हैं।
एक कॉन्फ़िगरेशन फ़ाइल स्कैन करें:
uv run ./scan.py /etc/nginx/nginx.conf
एक निर्देशिका को पुनरावर्ती रूप से स्कैन करें:
uv run ./scan.py -r /etc/nginx
वर्तमान निर्देशिका से *.conf फ़ाइलों के लिए पुनरावर्ती रूप से स्कैन करें:
uv run ./scan.py -r './*.conf'
ग्लोब्स को उद्धृत करें जब आप चाहते हैं कि स्कैनर उन्हें पुनरावर्ती रूप से विस्तारित करे। यदि आपका शेल पहले ./*.conf का विस्तार करता है, तो स्कैनर को केवल शेल द्वारा मिलान की गई फ़ाइलें प्राप्त होती हैं।
केवल प्रदान की गई फ़ाइलों को स्कैन करें और include निर्देशों का पालन न करें:
uv run ./scan.py --single ./site.conf
पार्सर चेतावनियाँ दिखाएं, जिनमें लापता इन्क्लूड फ़ाइलें शामिल हैं:
uv run ./scan.py -v -r /etc/nginx
समान आउटपुट प्रारूप और निकास कोड के साथ एक Go कार्यान्वयन go/ में उपलब्ध है। यह NGINX कॉन्फ़िगरेशन पार्सिंग के लिए nginx-go-crossplane और CLI फ़्लैग्स के लिए pflag का उपयोग करता है। इसके लिए Go 1.23 या उससे नए संस्करण की आवश्यकता है।
go run के साथ चलाएं:
cd go
go run . -r ../tests/fixtures
जब निष्कर्ष मौजूद हों, तो स्कैनर कोड 1 के साथ बाहर निकलता है। go run उस स्थिति में एक अतिरिक्त exit status 1 लाइन प्रिंट करेगा; जब आप केवल स्कैनर आउटपुट चाहते हैं तो बाइनरी बनाएं।
एक स्वतंत्र बाइनरी बनाएं:
cd go
go build -o cve-2026-42945-scan-go .
./cve-2026-42945-scan-go -r ../tests/fixtures
जोखिमपूर्ण कॉन्फ़िगरेशन पैटर्न एक location है जिसमें शामिल है:
rewrite निर्देश जिसके प्रतिस्थापन में एक अनएस्केप्ड ? हैlast, break, redirect, या permanent नहींset निर्देश जो एक रेगुलर एक्सप्रेशन कैप्चर जैसे $1, ${1}, $name, या ${name} को कॉपी करता हैउदाहरण संवेदनशील पैटर्न:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
स्कैनर location लाइन की रिपोर्ट करता है, rewrite या set लाइन की नहीं, क्योंकि लोकेशन वह कार्रवाई योग्य ब्लॉक है जिसे निरीक्षण और ठीक करना है।
tests/fixtures/ निर्देशिका में छोटे NGINX कॉन्फ़िगरेशन हैं जिन्हें उदाहरण के रूप में उपयोग किया जा सकता है:
| फिक्स्चर | अपेक्षित परिणाम |
|---|---|
tests/fixtures/vulnerable.conf | एक स्थितीय कैप्चर निष्कर्ष की रिपोर्ट करता है |
tests/fixtures/named_capture.conf | एक नामित कैप्चर निष्कर्ष की रिपोर्ट करता है |
tests/fixtures/missing_include_still_scans.conf | एक निष्कर्ष की रिपोर्ट करता है भले ही एक इन्क्लूड गायब हो |
tests/fixtures/safe_break_flag.conf | कोई निष्कर्ष नहीं क्योंकि रीराइट break का उपयोग करता है |
tests/fixtures/safe_no_capture.conf | कोई निष्कर्ष नहीं क्योंकि कोई कैप्चर उपलब्ध नहीं है |
सभी उदाहरण फिक्स्चर के विरुद्ध स्कैनर चलाएं:
uv run ./scan.py -r tests/fixtures
अपेक्षित निष्कर्ष:
/absolute/path/to/tests/fixtures/missing_include_still_scans.conf:6 -> location ~ ^/partial/(.*)$
/absolute/path/to/tests/fixtures/named_capture.conf:2 -> location /users
/absolute/path/to/tests/fixtures/vulnerable.conf:2 -> location ~ ^/api/(.*)$
यदि प्रभावित स्थान पाए जाते हैं, तो प्रत्येक निष्कर्ष अपनी पंक्ति पर प्रिंट होता है:
/absolute/path/to/file.conf:30 -> location ~ ^/aaaa/dddd/(.*)$
/absolute/path/to/nginx.conf:39 -> location ~ ^/api/(.*)$
कोई आउटपुट नहीं का मतलब है कि पार्स किए गए कॉन्फ़िगरेशन में कोई प्रभावित स्थान नहीं मिला।
यह एक स्थैतिक कॉन्फ़िगरेशन स्कैनर है। यह नहीं करता:
निष्कर्षों को उन स्थानों के रूप में मानें जिनकी समीक्षा और सुधार की आवश्यकता है। एक होस्ट वास्तव में तभी प्रभावित होता है जब संवेदनशील NGINX संस्करण रेंज और जोखिमपूर्ण कॉन्फ़िगरेशन पैटर्न दोनों मौजूद हों।
परीक्षण सूट चलाएं:
uv run python -m unittest discover -s tests -v
Go परीक्षण सूट चलाएं:
cd go
go test ./...
वाक्य-विन्यास जांच चलाएं:
uv run python -m py_compile scan.py
बंडल किए गए POC कॉन्फ़िगरेशन के विरुद्ध चलाएं:
uv run ./scan.py CVE-2026-42945-POC/env/nginx.conf
अपेक्षित आउटपुट:
/absolute/path/to/CVE-2026-42945-POC/env/nginx.conf:39 -> location ~ ^/api/(.*)$