MCPwn漏洞曝光,Nginx UI身份认证绕过风险完整披露

@ 查【 开房记录、手机定位 】查 @

@ 查【 外卖地址、聊天记录 】查 @

MCPwn(CVE-2026-33032)Nginx UI身份认证绕过漏洞完整披露

一、漏洞基础信息

1. 漏洞代号:MCPwn

2. CVE编号:CVE-2026-33032

3. 风险等级:严重(CVSS 3.1 9.8),CWE-306(关键功能缺失身份验证)

4. 发现者:Pluto Security 研究员 Yotam Perkal,2026-03-04 上报厂商

5. 修复版本:nginx-ui v2.3.4(2026-03-15 正式发布)

6. 受影响版本:nginx-ui ≤ v2.3.3(含v2.3.5部分分发版仍存在风险)

7. 利用状态:野外真实攻击活跃,已收录VulnCheck KEV已知利用漏洞库,2026年3月底起大量扫描入侵

8. 暴露资产:全网公网可访问实例约2689台,国内暴露资产占比最高

 2efdbb6b16e3186bdcb05187a47635de_075052.jpg

二、漏洞背景:MCP协议集成

nginx-ui是开源Nginx可视化管理面板,新增MCP(Model Context Protocol) 协议接口,用于AI工具远程读写、管理Nginx配置,提供两组配套接口:

-  /mcp :SSE长连接订阅通道(正常鉴权)

-  /mcp_message :POST消息下发通道(漏洞核心,缺失鉴权)

两个接口最终调用同一处理函数 mcp.ServeHTTP(c) ,执行全部12项高危管理工具。

三、根本技术成因(一行代码疏漏)

1. 漏洞路由代码(危险版本)

go

func InitRouter(r *gin.Engine) {

    // /mcp 完整防护:IP白名单 + 登录鉴权

    r.Any("/mcp", middleware.IPWhiteList(), middleware.AuthRequired(), func(c *gin.Context) {

        mcp.ServeHTTP(c)

    })

    // /mcp_message 仅IP白名单,缺失 AuthRequired() 鉴权中间件

    r.Any("/mcp_message", middleware.IPWhiteList(), func(c *gin.Context) {

        mcp.ServeHTTP(c)

    })

仅缺少27字符鉴权代码 , middleware.AuthRequired() ,直接造成身份绕过。

2. 双重安全缺陷叠加

1. 鉴权中间件缺失:攻击者无需账号密码,直接POST访问 /mcp_message 调用全部管理API;

2. IP白名单默认失效:面板默认白名单为空,中间件逻辑判定空列表=放行所有IP,无IP访问限制;

两者叠加,任意外网攻击者均可无认证操作服务器。

四、漏洞攻击危害(完全接管Nginx)

未授权调用全部MCP管理工具,实现服务器完整控制:

1. 读取、修改、删除全部Nginx站点配置,重载配置即时生效;

2. 新增恶意反向代理、钓鱼页面、流量劫持规则;

3. 终止/重启Nginx服务,下线全部业务网站;

4. 读取SSL私钥、站点证书、后台管理员账号;

5. 篡改页面植入挖矿、木马、凭证窃取脚本;

链式高危漏洞(CVE-2026-27944

同面板另一9.8分漏洞,可未授权下载加密备份,解密密钥明文在HTTP响应头 X-Backup-Security 返回,一键获取管理员Session、MCP节点密钥,配合MCPwn实现持久化后门。

五、简易攻击原理(无需登录凭证)

1. 攻击者直接向目标 http://IP:9000/mcp_message 发送POST JSON;

2. 路由未校验登录状态,直接执行MCP工具;

3. 下发修改Nginx配置指令,执行重载,恶意配置立即上线;

4. 全程仅1~2条HTTP请求,无验证码、无Token、无IP限制。

检测Payload(判断是否存在漏洞)

bash

# 访问漏洞接口,未修复会返回配置数据/200,修复后返回401 Unauthorized

curl -X POST http://目标IP:9000/mcp_message \

-H "Content-Type: application/json" \

-d '{"tool":"nginx_config_list","params":{}}'

- 漏洞存在:返回站点配置列表(200 OK)

- 已修复:返回401未授权

六、修复方案(优先级从高到低)

方案1:升级至安全版本(唯一根治方案)

升级nginx-ui ≥ v2.3.4,官方修复两点:

1. 为 /mcp_message 强制增加 AuthRequired() 鉴权中间件;

2. 补充回归测试,校验两个MCP接口均拦截未授权访问;

3. 优化默认监听逻辑,MCP默认绑定127.0.0.1本地回环。

Linux一键升级脚本:

bash

systemctl stop nginx-ui

curl -L -o /tmp/nginx-ui https://github.com/0xJacky/nginx-ui/releases/download/v2.3.4/nginx-ui-linux-amd64

chmod +x /tmp/nginx-ui && mv /tmp/nginx-ui /usr/local/bin/nginx-ui

systemctl start nginx-ui

方案2:临时应急规避(无法立刻升级时)

1. Nginx反向代理拦截(最推荐临时方案)

在面板外层Nginx配置拦截 /mcp_message 所有未带有效登录Cookie的请求;

2. 修改源码补充鉴权

手动给 /mcp_message 路由增加 middleware.AuthRequired() ,重新编译;

3. 严格配置IP白名单

填写可信内网IP段,禁止空白名单;

4. 防火墙封禁

外部防火墙仅放行内网IP访问9000管理端口,阻断公网访问nginx-ui。

方案3:端口与访问加固

1. 不将nginx-ui 9000端口直接暴露公网,通过VPN/内网访问;

2. 修改面板默认端口,开启强密码+双因素登录;

3. 限制MCP功能,业务无需AI管理时直接注释MCP相关路由。

七、自查与应急处置流程

自查步骤

1. 查看nginx-ui版本:访问面板设置页或执行 nginx-ui -v ;

2. 执行上文curl检测命令,确认 /mcp_message 是否返回401;

3. 防火墙/流量日志检索 POST /mcp_message 异常公网访问记录。

疑似入侵处置

1. 立即停止nginx-ui服务,升级至v2.3.4;

2. 全量审计所有Nginx配置文件,删除陌生恶意站点、代理规则;

3. 重置nginx-ui管理员账号密码,清除所有会话Token;

4. 排查服务器新增后门、定时任务、挖矿程序;

5. 下载日志溯源攻击者IP,封堵攻击源,上报安全设备。

八、安全启示

1. 多接口共用同一处理逻辑时,所有路由必须统一权限中间件,禁止漏加鉴权;

2. IP白名单默认策略应设为拒绝所有,而非放行所有;

3. 新增AI/MCP等远程控制接口需单独做安全审计,高危管理API强制双校验(IP+登录鉴权);

4. 管理类面板禁止直接公网暴露,必须配合内网隔离、端口白名单。

@ 查【 开房记录、手机定位 】查 @

@ 查【 外卖地址、聊天记录 】查 @

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!