找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5453

积分

0

好友

720

主题
发表于 2 小时前 | 查看: 5| 回复: 0

近日,开源 Nginx 管理工具 nginx-ui 中被发现存在一个评级为 9.8 的关键安全漏洞(CVE-2026-33032)。该工具在 GitHub 上已收获超过 11K 星标,Docker 拉取量超过 43 万次。漏洞目前已在野外被积极利用,攻击者能够借此完全控制 Nginx 服务器。

场景理解

nginx-ui 使用了 mcp-go 库中的 SSE 传输,涉及两个关键端点:

  • GET /mcp – 建立持久化的 Server-Sent Events 连接,用于接收 JSON-RPC 响应并启动会话。
  • POST /mcp_message – 用来向 MCP 服务器发送工具调用命令。

当客户端通过 GET /mcp 打开流时,服务器返回一个会话 ID:

data: /mcp_message?sessionId=9a7f3d21-6c5e-4b8a-9d72-3f1e8c4b2a11

之后,客户端向 /mcp_message 端点 POST 携带有效 sessionId 的请求来调用工具,响应则通过 SSE 流回传。这套流程中,nginx-ui 使用 node_secret 对 MCP 连接进行身份验证。

看上去一切正常?问题就出在这里。

理解安全漏洞

观察路由初始化代码可以发现端倪:

// Vulnerable Code
func InitRouter(r *gin.Engine) {
  r.Any(
    "/mcp",
    middleware.IPWhiteList(),
    middleware.AuthRequired(),
    func(c *gin.Context) {
      mcp.ServeHTTP(c)
    },
  )
  r.Any(
    "/mcp_message",
    middleware.IPWhiteList(),
    func(c *gin.Context) {
      mcp.ServeHTTP(c)
    },
  )
}

/mcp 端点受到 middleware.AuthRequired() 保护,但 /mcp_message 却没有任何身份校验。而 mcp.ServeHTTP() 负责处理所有 MCP 工具调用,这就意味着任何人在未认证的情况下都能通过 /mcp_message 端点直接执行工具。

虽然 /mcp_message 套了一层 middleware.IPWhiteList(),但这一层唯一的保护自身也存在致命缺陷:

// internal/middleware/ip_whitelist.go:11-26 - Empty whitelist allows all
func IPWhiteList() gin.HandlerFunc {
  return func(c *gin.Context) {
    clientIP := c.ClientIP()
    if len(settings.AuthSettings.IPWhiteList) == 0 || clientIP == "" || clientIP == "127.0.0.1" || clientIP == "::1" {
      c.Next()
      return
    }
    // ...
  }
}

IPWhiteList 为空时,白名单校验彻底失效,所有请求都会被放行。而在默认安装中,IPWhiteList 正好就是空的——这是一个典型的“失效开放”设计。

综上,只要白名单为空,下面列出的 12 个 MCP 工具就可以在没有身份验证的情况下被攻击者随意调用。

可用的 MCP 工具

来自 mcp/nginx/

  • restart_nginx – 重启 Nginx 进程
  • reload_nginx – 重新加载 Nginx 配置
  • nginx_status – 读取 Nginx 状态

来自 mcp/config/

  • nginx_config_add – 创建新的 Nginx 配置文件
  • nginx_config_modify – 修改现有配置文件
  • nginx_config_list – 列出所有配置
  • nginx_config_get – 读取配置文件内容
  • nginx_config_enable – 启用/禁用站点
  • nginx_config_rename – 重命名配置文件
  • nginx_config_mkdir – 创建目录
  • nginx_config_history – 查看配置历史
  • nginx_config_base_path – 获取 Nginx 配置目录路径

影响

  1. 完全控制 Nginx 服务:攻击者可以在配置目录内任意创建、修改和删除 Nginx 配置文件,这些操作会立即触发重载或重启。
  2. 凭证窃取:通过将流量代理到攻击者控制的端点,可窃取凭证、会话令牌以及其他敏感数据。
  3. 拒绝服务:写入无效的配置文件会导致 Nginx 重启失败,服务完全中断。
  4. 权限提升:攻击者可以注入包含自定义 log_formataccess_logs 指令来捕获 Authorization 头部,进而获取 REST API 的访问权限。

全球范围内暴露的 Nginx 实例数量如下,其中多数集中在中国、美国、印度尼西亚、德国和香港。

Shodan搜索nginx-ui暴露实例分布图

现在该怎么做?

CVE-2026-33032 已在野外被积极利用。如果你正在运行易受攻击的版本,务必立即采取行动。

如果你正在使用启用了 MCP 的 nginx-ui:

  • 立即更新到 v2.3.4 或更高版本
  • 若无法立即更新,请立刻禁用 MCP,或紧急将可信主机添加到 IP 白名单,切勿将白名单留空

修复

该漏洞在 2026 年 3 月 15 日发布的 v2.3.4 中得到修复——修复方式正是为 /mcp_message 端点补上缺失的身份验证。

修复后的代码长这样:


// Patched code
r.Any(
  "/mcp_message",
  middleware.IPWhiteList(),
  middleware.AuthRequired(),
  func(c *gin.Context) {
    mcp.ServeHTTP(c)
  },
)



上一篇:AI逆向工程实录:从脱壳到解密,重新认知AI的能力边界
下一篇:Mythos AI 在 Firefox 150 发布前发现 271 个安全漏洞
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-1 03:27 , Processed in 0.940761 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表