
रूट रजिस्ट्रेशन पर एक गुम फ़ंक्शन कॉल ही MCP इंटरफ़ेस को एक अनऑथेंटिकेटेड RCE गेटवे में बदलने के लिए पर्याप्त था।
nginx-ui MCP प्रमाणीकरण बायपास के लिए गैर-विनाशकारी पहचान उपकरण, जिसे सार्वजनिक रूप से MCPwn के नाम से जाना जाता है। किसी भी nginx-ui इंस्टेंस का दो HTTP-अनुरोधों वाला बिना प्रमाणीकरण के अधिग्रहण करें, जो कमजोर संस्करण चला रहा हो।
nginx-ui एक Model Context Protocol (MCP) इंटरफ़ेस उजागर करता है जो एक प्रमाणित ऑपरेटर को JSON-RPC के माध्यम से nginx कॉन्फ़िगरेशन संपादन, पुनरारंभ कमांड और बैकअप संचालन जैसे विनाशकारी उपकरण चलाने की अनुमति देता है।
/mcp एंडपॉइंट AuthRequired() मिडलवेयर द्वारा सुरक्षित है, जबकि
इसका युग्मित /mcp_message एंडपॉइंट, जो वास्तव में टूल
आह्वान प्राप्त करता है, मिडलवेयर के बिना तैनात किया गया था। कोई भी क्लाइंट जो
नेटवर्क पर UI तक पहुँच सकता है:
/mcp पर एक Server Sent Events (SSE) स्ट्रीम खोलें और बिना कोई
क्रेडेंशियल प्रस्तुत किए एक नया sessionID प्राप्त करें।/mcp_message पर POST करके उस sessionID का उपयोग किसी भी पंजीकृत MCP टूल को आह्वान करने के लिए करें, फिर भी बिना प्रमाणीकरण के।हमलावर को nginx प्रक्रिया का पूर्ण नियंत्रण मिल जाता है: ट्रैफ़िक को पुनर्निर्देशित करने के लिए सर्वर ब्लॉक संपादित करें, पथ रीड के माध्यम से TLS निजी कुंजियाँ निकालें, nginx को पुनः लोड या रोकें, और स्थायी बैकडोर स्थापित करें।
// कमजोर (पूर्व-2.3.4)
r.GET("/mcp", AuthRequired(), mcpHandler)
r.POST("/mcp_message", mcpMessageHandler) // मिडलवेयर गायब
// 2.3.4 में सुधारित
r.GET("/mcp", AuthRequired(), mcpHandler)
r.POST("/mcp_message", AuthRequired(), mcpMessageHandler)
रूट पंजीकरण पर एक गायब फ़ंक्शन कॉल MCP इंटरफ़ेस को बिना प्रमाणीकरण वाले RCE गेटवे में बदलने के लिए पर्याप्त थी।
हमलावर nginx-ui (<2.3.4)
| 1) GET /mcp (कोई प्रमाणीकरण नहीं) |
| --------------------------------------> |
| 2) event: endpoint data: /mcp_message?sessionID=XYZ
| <-------------------------------------- |
| 3) POST /mcp_message?sessionID=XYZ |
| body: JSON-RPC call_tool "nginx_reload" या
| "edit_config {...}" |
| --------------------------------------> |
| 4) 200 OK; टूल पूर्ण विशेषाधिकारों के साथ निष्पादित
| <-------------------------------------- |
यह रिपॉजिटरी जानबूझकर किसी भी विनाशकारी कार्रवाई से बचती है। यह
डिटेक्टर केवल रीड-ओनली MCP विधियों (tools/list) का उपयोग करता है। तर्क:
> चरण 1 nginx-ui की पहचान करें
> GET / (HTML शीर्षक, JS बंडल)
> GET /api/settings (nginx-ui कुंजियों का संदर्भ देने वाला JSON)
> हेडर / बॉडी रेगेक्स के माध्यम से संस्करण निकालें
> चरण 2 /mcp पर SSE स्ट्रीम खोलें
> "endpoint" इवेंट से पहला sessionID पार्स करें
> चरण 3 POST /mcp_message?sessionID=<id>
> Body: {"jsonrpc":"2.0","method":"tools/list","params":{}}
> कोई Authorization हेडर नहीं
> चरण 4 कमजोर यदि स्थिति 200 और बॉडी में टूल मैनिफेस्ट है
> सुधारित यदि स्थिति 401 / 403 / 404
> अन्यथा अनिर्णायक
tools/list JSON-RPC विधि रीड-ओनली है। यह सूचीबद्ध करती है कि
MCP सर्वर किन टूलों के बारे में जानता है लेकिन उनमें से किसी को भी आह्वान नहीं करता। स्क्रिप्ट
किसी अन्य विधि को POST करने से इनकार करती है और विनाशकारी
टूलों के लिए पेलोड कभी नहीं बनाती।
git clone https://github.com/your-org/CVE-2026-33032-detector.git
cd CVE-2026-33032-detector
python3 --version # 3.9 या नया
# कोई तृतीय-पक्ष पैकेज आवश्यक नहीं।
Nmap NSE घटक के लिए, nginx-ui-mcpwn.nse को अपनी स्थानीय
स्क्रिप्ट निर्देशिका में कॉपी करें और स्क्रिप्ट डेटाबेस को ताज़ा करें:
cp nginx-ui-mcpwn.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb
# एकल लक्ष्य
python3 detect_nginx_ui_mcpwn.py --target https://nginx-ui.internal
# फ़ाइल से बल्क स्कैन
python3 detect_nginx_ui_mcpwn.py --targets targets.txt --workers 20
# jq में पाइपिंग के लिए उपयुक्त JSON (NDJSON) आउटपुट
python3 detect_nginx_ui_mcpwn.py --target 10.0.0.5:9000 --json | jq .
कमांड लाइन संदर्भ:
nmap -p 80,443,9000 --script nginx-ui-mcpwn 10.0.0.0/24
nmap -p 443 --script nginx-ui-mcpwn --script-args "nginx-ui-mcpwn.timeout=8" host.example.com
_ _ _ _ _ ___ __ __ ____ ____
| \ | | __ _(_)_ __ __ __ | | | ||_ _| | \/ |/ ___| _ \__ ___ __
| \| |/ _` | | '_ \\ \/ /_____| | | | | | | |\/| | | | |_) \ \ /\ / / '_ \
| |\ | (_| | | | | |> <|_____| |__| | | | | | | | |___| __/ \ V V /| | | |
|_| \_|\__, |_|_| |_/_/\_\ |_____|_||___| |_| |_|\____|_| \_/\_/ |_| |_|
|___/
CVE-2026-33032 nginx-ui MCPwn डिटेक्टर > गैर-विनाशकारी
[!] कमजोर https://nginx-ui.internal संस्करण=2.3.2 साक्ष्य=स्थिति=200; body_preview={"jsonrpc":"2.0","id":"...","result":{"tools":[{"name":"edit_config",...
[+] सुधारित https://nginx-ui-patched:9000 संस्करण=2.3.4 साक्ष्य=स्थिति=401; body_preview={"error":"unauthorized"}
[.] nginx-ui नहीं https://example.com साक्ष्य=फ़िंगरप्रिंट नकारात्मक
सारांश: 1/3 लक्ष्य कमजोर के रूप में चिह्नित
{"target":"https://nginx-ui.internal","reachable":true,"is_nginx_ui":true,"mcp_endpoint_present":true,"session_id_obtained":true,"mcp_message_unauthenticated":true,"vulnerable":true,"nginx_ui_version":"2.3.2","evidence":"status=200; body_preview=...","error":null}
PORT STATE SERVICE
9000/tcp open http
| nginx-ui-mcpwn:
| status: कमजोर
| version: 2.3.2
| session_id: abc123
|_ evidence: tools/list बिना क्रेडेंशियल के स्वीकृत
CVE-2026-27944 (बिना प्रमाणीकरण वाला /api/backup डाउनलोड जो
X-Backup-Security हेडर में AES कुंजी लीक करता है) MCPwn के साथ
स्वच्छ रूप से श्रृंखलाबद्ध होता है: बैकअप संग्रह node_secret उजागर करता है, जिसका उपयोग
33032 के सुधार के बाद भी /mcp में प्रमाणीकरण के लिए किया जा सकता है,
जब तक ऑपरेटर सीक्रेट को घुमाते नहीं हैं।
27944 के लिए साथी डिटेक्टर इस शोध परियोजना की सहोदर निर्देशिका में रहता है।
node_secret, व्यवस्थापक पासवर्ड हैश और किसी भी TLS निजी
कुंजियों को घुमाएँ जो nginx-ui प्रक्रिया के लिए सुलभ थीं।/mcp_message रूट तक पहुँचने से पहले प्रमाणीकरण लागू करता है।यह उपकरण रक्षकों को उन वातावरणों के भीतर बिना पैच वाले इंस्टेंस की पहचान करने में मदद करने के लिए प्रकाशित किया गया है जिनका परीक्षण करने के लिए वे अधिकृत हैं। इसे उन प्रणालियों के खिलाफ उपयोग न करें जिनके मालिक आप नहीं हैं या जिनका आकलन करने की स्पष्ट अनुमति आपके पास नहीं है। लेखक दुरुपयोग के लिए सभी जिम्मेदारी अस्वीकार करते हैं।
MIT लाइसेंस के तहत जारी। प्रति-फ़ाइल नोटिस के लिए व्यक्तिगत स्क्रिप्ट हेडर देखें।
| फ़ील्ड | मान |
|---|
| CVE ID | CVE-2026-33032 |
| उपनाम | MCPwn |
| CVSS 3.1 | 9.8 / क्रिटिकल (AV:N / AC:L / PR:N / UI:N / S:U / C:H/I:H/A:H) |
| CWE | CWE-306 महत्वपूर्ण कार्य के लिए प्रमाणीकरण की कमी |
| प्रभावित उत्पाद | nginx-ui (github.com/0xjacky/nginx-ui) |
| प्रभावित संस्करण | 2.3.4 से पहले के सभी संस्करण |
| सुधारित संस्करण | 2.3.4 |
| शोषण स्थिति | जंगल में सक्रिय (Picus Security, Recorded Future) |
| Shodan एक्सपोज़र | ~2,689 इंटरनेट-मुख वाले इंस्टेंस |
| प्रकाशन तिथि | 2026-04-15 |
| MCP टूल | nginx सर्वर पर प्रभाव |
|---|
edit_config | मनमाने सर्वर ब्लॉक फिर से लिखें, हमलावर upstream डालें |
reload_nginx | बिना मैन्युअल कार्रवाई के हमलावर कॉन्फ़िगरेशन लागू करें |
stop_nginx | सेवा से इनकार |
read_file | माउंटेड पथों से TLS निजी कुंजियाँ, क्रेडेंशियल बाहर निकालें |
create_cert | हमलावर नियंत्रण में TLS प्रमाणपत्र फिर से जारी करें |
list_backups / download | node_secret और हैश सहित पूरा nginx-ui बैकअप खींचें |
| फ़्लैग | उद्देश्य |
|---|
--target | एकल URL या host[:port] |
--targets | न्यूलाइन से अलग किया गया लक्ष्य फ़ाइल |
--timeout | HTTP टाइमआउट, डिफ़ॉल्ट 10 सेकंड |
--workers | बल्क स्कैन के लिए समवर्ती वर्कर, डिफ़ॉल्ट 10 |
--verify-tls | TLS प्रमाणपत्र सत्यापन लागू करें (डिफ़ॉल्ट रूप से बंद) |
--json | NDJSON उत्सर्जित करें, प्रति लक्ष्य एक रिकॉर्ड |
--no-banner | ASCII बैनर दबाएँ |