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安全, 中间件安全, 加密, 对称加密, 插件系统, 无后门, 无服务器架构, 未授权访问, 漏洞扫描器, 白名单绕过, 网络安全, 网络安全审计, 自动化审计, 蓝队分析, 认证绕过, 逆向工具, 配置泄露, 隐私保护, 非破坏性测试