1day:可实现Nginx服务器完全控制

admin 2026-04-24 05:54:52 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档披露了Nginx-UI工具中的高危漏洞CVE-2026-33032(CVSS9.8),该漏洞因/mcp_message端点缺失身份验证且IP白名单默认空值失效,允许未授权攻击者执行12个MCP工具,实现Nginx配置篡改、服务控制及数据窃取。关键发现包括漏洞已在野利用、全球2689个实例暴露。可操作建议为立即升级至v2.3.4或禁用MCP功能。 综合评分: 87 文章分类: 漏洞分析,WEB安全,应用安全,云安全,安全工具


cover_image

1day:可实现Nginx服务器完全控制

迪哥讲事

2026年4月23日 10:13 四川

在小说阅读器读本章

去阅读

以下文章来源于骨哥说事 ,作者骨哥说事

骨哥说事 .

一个喜爱鼓捣的技术宅

| | | — | | 声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 |

#

#

#

#

近日,一款流行的基于Web的Nginx管理工具nginx-ui中发现了一个关键安全漏洞,并且已被在野利用。该工具在GitHub上拥有超过11K星标和43万+的Docker拉取量。漏洞CVE-2026-33032的CVSS得分为9.8,使攻击者能够完全控制Nginx服务器。

场景理解

nginx-ui使用了mcp-go库中的SSE传输。以下是两个重要的端点:

GET /mcp – 打开一个持久的SSE流。用于建立持久的Server-Sent Events连接以接收JSON-RPC响应并启动会话。

POST /mcp_message – 用于向MCP服务器发送命令。

当一个客户端发送GET请求到 /mcp 端点以打开流时,服务器会响应一个会话ID,如下所示:

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

之后,通过POST请求调用工具到 /mcp_message 端点,并携带有效的 sessionId,响应通过SSE流发送回客户端。这里,nginx-ui使用 node_secret 对MCP连接进行身份验证。

但你现在肯定在想这有什么问题,到目前为止一切看起来都正常。我们来看看。

理解安全漏洞

// Vulnerable Codefunc 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 allfunc 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 为空,那么这个机制就完全失效,因为它允许所有没有IP过滤的请求;并且默认安装时 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. 写入无效的配置文件会导致服务器重启并完全中断服务。
  4. 攻击者可以通过注入包含自定义 log_format 模式的 access_logs 指令来捕获 Authorization 头,这使其能够提升权限,访问REST API。

数据显示全球范围内暴露的Nginx实例数量。

全球共有2689个暴露的实例,其中大部分来自中国、美国、印度尼西亚、德国和香港。

现在该怎么做?

已确认CVE-2026-33032在野被积极利用。如果你正在运行易受攻击的版本,请立即更新。

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

  • 立即更新到 v2.3.4 或更高版本
  • 如果你无法立即更新,请立即禁用MCP,或者紧急地将可信主机添加到IP白名单中,切勿将其留空。

修复

该漏洞在2026年3月15日发布的 v2.3.4 中得到了修复,你猜对了,修复方法就是在 /mcp_message 端点上添加缺失的身份验证。

修复后的代码看起来像这样:

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

原文:

https://infosecwriteups.com/cve-2026-33032-exploitation-allows-full-control-over-nginx-server-838949e8637c

如果你是一个长期主义者,欢迎加入我的知识星球,本星球日日更新,包含号主大量一线实战,全网独一无二,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款

往期回顾

#

如何利用ai辅助挖漏洞

#

如何在移动端抓包-下

#

如何绕过签名校验

#

一款bp神器

挖掘有回显ssrf的隐藏payload

ssrf绕过新思路

一个辅助测试ssrf的工具

dom-xss精选文章

年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips‍


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:迪哥讲事 《1day:可实现Nginx服务器完全控制》

评论:0   参与:  0