本文使用的 Docker 镜像
发布日期: 2026 年 10 月 13 日
风险等级: 高危(High)
漏洞编号: CVE-2026-84312 · CVE-2026-84313 · CVE-2026-84314 · CVE-2026-84315 · CVE-2026-84316 · CVE-2026-84317 · CVE-2026-84318 · CVE-2026-84319 · CVE-2026-84360
涉及镜像: uozi/nginx-ui — 轩辕镜像 · Docker Hub
CVSS: 最高 8.8(High)
披露时间: 2026 年 10 月,Nginx UI 安全公告
相关公告: GHSA-76pm-mq2q-9gcr · v2.4.1
一、漏洞概述
Nginx UI 用来在网页里管理 nginx 配置、证书和站点。官方镜像是 uozi/nginx-ui。
低于 2.4.1 的版本里,有一批独立编号、同一次升级可以盖住的高危。一部分是登录会话没有做 OTP 或通行密钥的二次确认,被盗的 JWT 就能改别人的密码、绑定攻击者的二次验证,或直接改备份、证书和 nginx。另一部分在配置写入:校验只看每行第一个词,或者 MCP 工具根本没走 REST 已经接上的校验。官方镜像带有 ngx_http_js_module.so。相关模块已加载时,写入危险指令可以在 nginx worker 里执行代码;镜像若以 root 运行,还可以读写任意文件。
这些入口都要某种认证(用户 JWT、node secret 或 Casdoor 登录流程),不是未认证直接打进来。开启了 Casdoor SSO、OTP、MCP 或自助程度较高的账号时,对应的那几条才用得上。
二、漏洞状态
统计截止: 2026 年 10 月 13 日(UTC+8)
| 项目 | 状态 |
|---|---|
| 漏洞细节 | 已公开(Nginx UI 安全公告) |
| 受影响版本 | 低于 2.4.1 |
| 官方补丁 | 2.4.1 及更高。Docker Hub 已有标签 2.4.1 |
| CISA KEV | 未列入 |
| CVE | CVSS | 要点 | 谁受影响 |
|---|---|---|---|
| CVE-2026-84312 | 7.1 | Casdoor SSO 使用固定的 OAuth state。未认证攻击者可诱导受害者走攻击者控制的 Casdoor 流程,绕过 OAuth 的 CSRF 防护,铸造 Nginx UI 会话 | 只影响开启了 Casdoor SSO 的部署 |
| CVE-2026-84313 | 8.8 | /api/otp_enroll 与 /api/finish_passkey_register 不要求安全会话。窃得的 JWT 可绑定攻击者的 TOTP 或通行密钥,改密后仍能接管账户 | 已认证会话被盗 |
| CVE-2026-84314 | 8.7 | POST /api/users/:id 在没有安全会话时可以修改其他用户的密码,包括初始管理员,并作废管理员令牌 | 已认证用户 |
| CVE-2026-84315 | 8.3 | 备份、DNS、证书、ACME、nginx 控制、站点与流自动化等变更路由未强制 OTP 或通行密钥阶梯 | 已认证会话被盗即可做敏感变更 |
| CVE-2026-84316 | 8.8 | 指令校验只看每行第一个 token。同一行用分号或 include 可以绕过拒绝列表,写入本应被拦下的指令。相关模块已加载时,可在 nginx worker 中执行代码 | 已认证、且能改配置 |
| CVE-2026-84317 | 8.8 | MCP 工具 nginx_config_add 没有调用配置校验。REST 的增改和 MCP 的 nginx_config_modify 会校验。调用方内容被直接写盘并 reload nginx | 已认证的 MCP 调用方(node secret 或用户 JWT),或被提示注入带偏的智能体 |
| CVE-2026-84318 | 8.8 | 与 CVE-2026-84317 同属 MCP nginx_config_add 在写配置并 reload 时跳过 ValidateConfigFile,编号独立 | 启用了 MCP 的实例 |
| CVE-2026-84319 | 8.3 | MCP 配置接口允许次级已认证用户使用 REST 会拒绝的受限指令,从而加载 njs 或攻击者提供的脚本,在 worker 中执行 | 启用了 MCP、且存在次级账号 |
| CVE-2026-84360 | 8.1 | HTTP 改配置要求安全会话,/mcp 与 /mcp_message 上的配置增改只看普通认证。已开启 OTP 的用户仅凭普通 JWT 就能经 MCP 改 nginx | 开启了 OTP,且 MCP 开着 |
官方镜像自带 njs 模块。CVE-2026-84316、CVE-2026-84317、CVE-2026-84318、CVE-2026-84319 在这份镜像上可以走到 worker 里的代码执行。进程以 root 运行时,还可以读写容器内任意文件。
三、影响范围
1. 版本与发行形态
| 发行形态 | 受影响范围 | 修复 |
|---|---|---|
| Nginx UI | < 2.4.1 | ≥ 2.4.1 |
官方镜像 uozi/nginx-ui | 标签低于 2.4.1 | Docker Hub 标签 2.4.1 |
没有打开 Casdoor 的实例不受 CVE-2026-84312 影响。没有打开 MCP 的实例不受 CVE-2026-84317、CVE-2026-84318、CVE-2026-84319、CVE-2026-84360 这条 MCP 路径影响。会话与指令校验那几条仍然覆盖普通 HTTP 管理口。
2. 典型受影响场景
- 管理口对内网或公网开放,用户 JWT 有可能泄露
- 打开了 Casdoor SSO、OTP、通行密钥或 MCP
- 使用官方镜像,njs 模块在,进程是 root
- 智能体持有 MCP 凭据,提示内容不可信
管理口只在本机、MCP 关闭、并且已经是 2.4.1 或更高时,不在这批公告的修复线以下。
四、修复建议
1. 升级到 2.4.1 或更高(推荐)
一次升级覆盖上表全部编号。
| 形态 | 最低建议版本 |
|---|---|
uozi/nginx-ui | 2.4.1 |
Docker Hub: uozi/nginx-ui
轩辕镜像: uozi/nginx-ui
bashdocker pull docker.xuanyuan.run/uozi/nginx-ui:2.4.1
将 Compose 或运行参数中的镜像改为上述坐标后,重新创建容器。升级后确认版本不低于 2.4.1。
发行说明:v2.4.1。
Hub 上还有按提交号滚动的标签。请固定 2.4.1 或更高的正式版本,不要用低于 2.4.1 的标签。
2. 升级后检查配置与账户
- 查看现有 nginx 配置里有没有本应被拒绝的指令,包括动态模块、js、perl,以及把 worker 用户改成 root 的配置。
- 如果 JWT 或 MCP 凭据曾经泄露,轮换用户口令、OTP、通行密钥和 node secret。
- 开启了 Casdoor 的,升级后让用户重新登录,不要继续使用升级前铸出的会话。
五、临时缓解措施
在完成升级之前:
-
关掉或限制 MCP
不需要智能体改配置时先关闭/mcp。MCP 是 CVE-2026-84317、CVE-2026-84318、CVE-2026-84319、CVE-2026-84360 的入口。 -
去掉用不到的 njs 和 perl 模块
模块不在时,注入对应指令也跑不起来。这不能补上校验缺失。 -
不要把管理口暴露到不可信网络
被盗 JWT 仍可改密码、绑定二次验证或改配置。 -
Casdoor SSO 先评估是否必须开着
CVE-2026-84312 只打中开了 Casdoor 的部署。
六、与轩辕镜像用户的相关说明
轩辕镜像提供的是镜像加速与拉取服务,不替代 Nginx UI 的版本升级。
- 站内页:uozi/nginx-ui。拉取命令为
docker.xuanyuan.run/uozi/nginx-ui:2.4.1。 - 加速拉取不会自动变成 2.4.1。请把标签固定为 2.4.1 或更高。
- 配置与排错见 轩辕镜像使用手册、镜像拉取 FAQ。
七、参考链接
- 发行说明:v2.4.1
- GHSA-44xr-mrhh-qm78(CVE-2026-84312)
- GHSA-gfrc-g87h-7h5w(CVE-2026-84313)
- GHSA-2gc7-j998-5xx6(CVE-2026-84314)
- GHSA-5v7c-xpfp-p65m(CVE-2026-84315)
- GHSA-cf23-7qxj-xmhr(CVE-2026-84316)
- GHSA-76pm-mq2q-9gcr(CVE-2026-84317)
- GHSA-9jww-cxg5-rj9m(CVE-2026-84318)
- GHSA-5r62-gj48-897x(CVE-2026-84319)
- GHSA-vc32-4gwf-77xp(CVE-2026-84360)
- Docker Hub:uozi/nginx-ui
- 轩辕站内镜像页:uozi/nginx-ui
轩辕镜像安全团队
2026 年 10 月 13 日
评论交流
免责声明
本博客文章所提供的内容、技术方案、配置示例及部署指南等信息,仅供学习交流和技术参考使用。文章内容基于发布时的技术环境和版本信息编写,可能因时间推移、技术更新或环境差异而存在不适用的情况。
用户在参考本博客内容进行部署操作前,应当充分了解相关技术风险,并建议在测试环境中进行充分验证和测试,确认无误后再考虑在生产环境中使用。生产环境部署前,请务必进行数据备份,并制定相应的回滚方案。
用户因使用本博客内容进行部署操作而产生的任何损失、数据丢失、系统故障、安全风险或其他问题,均由用户自行承担全部责任。轩辕镜像官方不对因使用本博客内容而产生的任何直接或间接损失承担责任。
本免责声明的最终解释权归轩辕镜像官方所有。
