Twinson333/cve-2026-33032-scanner

GitHub: Twinson333/cve-2026-33032-scanner

针对 Nginx-UI MCP 端点认证绕过漏洞(CVE-2026-33032)的非破坏性扫描器,支持批量检测、指纹识别和 JSON 报告输出。

Stars: 0 | Forks: 0

# CVE-2026-33032 扫描器 **针对 Nginx-UI MCP 端点认证绕过的非破坏性漏洞扫描器** ## 漏洞概述 **CVE-2026-33032** 是 nginx-ui 的模型上下文协议 (MCP) 集成中的一个认证绕过漏洞。`/mcp_message` 端点缺少认证中间件,但提供了对所有 MCP 工具的访问权限,允许远程攻击者: - 读取 nginx 配置和状态 - 创建/修改/删除 nginx 配置文件 - 重启或重载 nginx 服务 - 窃取敏感配置数据 - 注入恶意配置以进行流量拦截 ### 根本原因 1. **认证不对称**:`/mcp` 端点需要认证,但 `/mcp_message` 不需要: r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), ...) r.Any("/mcp_message", middleware.IPWhiteList(), ...) // 缺少 AuthRequired() 2. **默认允许的 IP 白名单**:默认 IP 白名单为空,中间件将其视为 "允许所有" 3. **两个端点共享处理器**:两者都路由到同一个 `mcp.ServeHTTP()`,该处理器处理所有 MCP 工具调用 ## 扫描器功能 ✅ **非破坏性测试** - 仅使用只读 MCP 工具 ✅ **全面指纹识别** - 识别 nginx-ui 安装 ✅ **安全的 PoC** - 不进行任何配置更改 ✅ **批量扫描** - 从文件处理多个目标 ✅ **详细报告** - 用于集成的 JSON 输出 ## 安装 ``` # Clone 或下载 scanner git clone https://github.com/cve-2026-33032-scanner.git cd cve-2026-33032 chmod +x cve-2026-33032-scanner.py # Install 依赖 (如需) pip3 install requests ``` ## 用法 ### 基础扫描 ``` # Scan 单个目标 python3 cve-2026-33032-scanner.py -u http://target.com:9000 # Scan 并输出详细信息 python3 cve-2026-33032-scanner.py -u https://nginx-ui.example.com -v # 自定义 timeout python3 cve-2026-33032-scanner.py -u http://192.168.1.100:9000 -t 15 ``` ### 批量扫描 ``` # 从文件 Scan 多个目标 python3 cve-2026-33032-scanner.py -f targets.txt # 输出详细信息并生成 JSON 报告 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 - 每行一个 URL http://192.168.1.100:9000 https://nginx-ui.corp.com http://10.0.0.50:9000 ``` ## 工作原理 扫描器执行多阶段检测流程: ### 阶段 1:指纹识别 检查常见的 nginx-ui 端点以识别安装: - `/api/info` - 版本信息 - `/login` - 登录页面 - `/api/auth/login` - 认证端点 - `/mcp` 和 `/mcp_message` - MCP 端点 ### 阶段 2:认证检查 测试 `/mcp` 端点以验证其正确要求认证(基线) ### 阶段 3:漏洞利用 在**无认证**的情况下通过 `/mcp_message` 尝试**非破坏性** MCP 工具调用: 1. **nginx_status**(最安全)- 读取 nginx 进程状态 2. **nginx_config_list** - 列出配置文件 3. **nginx_config_base_path** - 获取配置目录路径 如果任何工具在无认证情况下成功执行,则确认存在漏洞。 ## 使用的安全 MCP 工具 扫描器仅调用**只读** 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 ``` ## 修复方案 如果确认存在漏洞: 1. **立即修复**:为 `/mcp_message` 添加认证中间件: r.Any("/mcp_message", middleware.IPWhiteList(), middleware.AuthRequired(), func(c *gin.Context) { mcp.ServeHTTP(c) }) 2. **深度防御**: - 配置 IP 白名单默认为拒绝所有 - 如果不需要外部访问,将 MCP 端点限制为仅 localhost - 在 MCP 端点上实施速率限制 3. **升级**:更新到已修补的 nginx-ui 版本(可用时) ## 负责任的披露 此工具设计用于: - ✅ 漏洞赏金计划 - ✅ 授权渗透测试 - ✅ 经许可的安全研究 - ✅ 披露前的漏洞验证 **请勿在您不拥有或未获得明确测试许可的系统上使用此工具。** ## 漏洞赏金技巧 报告此漏洞时: 1. **严重程度**:危急 (CVSS 9.8+) - 网络可访问 - 无需认证 - 完全的系统入侵 - 配置窃取 + 修改 2. **证据**:包含显示成功进行未经认证 MCP 工具调用的扫描器输出 3. **影响链**: - 未经认证的访问 → 配置读取 → 后端拓扑暴露 - 配置写入 → 恶意代理注入 → 凭据收集 - Nginx 重启 → 服务中断 → DoS 4. **安全 PoC**:仅使用只读工具 (nginx_status, nginx_config_list) ## 技术细节 ### MCP 工具调用格式 ``` 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" } ``` ## 参考资料 - **CVE**: CVE-2026-33032 - **受影响**: nginx-ui(带有 MCP 集成的版本) - **CVSS**: 9.8 (危急) - **CWE**: CWE-306 (关键功能缺失认证) ## 许可证 此工具仅供教育和授权安全测试目的使用。 ## 作者 **Antony Esthak Twinson @ Cyber Tamarin** 安全研究员 | 漏洞赏金猎人 专注于 Web 应用安全与漏洞研究 **免责声明**:此扫描器仅执行非破坏性测试。在测试任何系统之前,请务必获得适当的授权。
标签:CISA项目, CVE-2026-33032, HTTP请求, Linux取证, MCP, Model Context Protocol, Nginx, Nginx-UI, Python, Web安全, 中间件安全, 加密, 对称加密, 插件系统, 无后门, 无服务器架构, 未授权访问, 漏洞扫描器, 白名单绕过, 网络安全, 网络安全审计, 自动化审计, 蓝队分析, 认证绕过, 逆向工具, 配置泄露, 隐私保护, 非破坏性测试