漏洞概述
CVE-2026-42945(安全社区将其命名为 "Nginx Rift")是 Nginx ngx_http_rewrite_module 中的一个严重堆缓冲区溢出漏洞。该漏洞由 DepthFirst 的自动化 AI 安全分析系统发现,攻击者可以在无需任何认证的情况下,向存在漏洞的 Nginx 服务器发送恶意 HTTP 请求,实现远程代码执行。
该漏洞的 CVSS 评分为 9.2(严重),影响范围极其广泛:Nginx 0.6.27 至 1.30.0 的所有版本。这意味着自 2008 年漏洞被引入以来,近 18 年间发布的数百个 Nginx 版本均受影响。攻击者通过结合 rewrite 规则解析缺陷与跨请求堆风水(heap feng shui)技术,篡改相邻 ngx_pool_t 清理函数指针,最终劫持控制流。
发现者:DepthFirst AI 安全分析
DepthFirst 是一家专注于 AI 驱动的漏洞研究公司。他们的自动化安全分析流水线发现了这个深埋 18 年的漏洞。这是继 curl、Exim、Dnsmasq 等基础设施软件之后,AI 发现零日漏洞的又一个里程碑事件。
除了 CVE-2026-42945,Nginx 2026 年 5 月安全公告还同时披露了另外三个内存损坏漏洞:
- CVE-2026-42946 — mp4 模块中的另一个堆缓冲区溢出
- CVE-2026-40701 — 内存信息泄露漏洞
- CVE-2026-42934 — 另一内存损坏问题
这四个漏洞均在 Nginx 1.31.0 和 1.30.1 中同时修复。
受影响版本
| 状态 | 版本范围 |
|---|---|
| ❌ 受影响 | Nginx 0.6.27 至 1.30.0 |
| ✅ 已修复 | Nginx 1.31.0(主线版),Nginx 1.30.1(稳定版) |
技术深度解析
根因:is_args 传播失败
漏洞位于 ngx_http_rewrite_module 中,具体涉及 Nginx 如何处理 rewrite 指令与 set 指令的组合。
当 Nginx 处理重写规则时,URI 解析器中的 is_args 和 args 字段可能发生不同步。关键缺陷在于:当 rewrite 规则触发内部重定向并修改查询字符串参数时,is_args 标志未能正确传播到 ngx_http_core_run_phases() 函数。这创建了一个窗口期,导致内存分配基于错误的缓冲区大小假设。
受影响的代码路径涉及在 rewrite 上下文中使用 set $args 指令。攻击者通过控制请求 URI 和查询字符串,可以构造触发出这种不同步的输入。
利用原理:跨请求堆风水(Cross-Request Heap Feng Shui)
漏洞利用分为多个阶段,跨越多个独立的 HTTP 请求:
- 喷洒阶段(Spray Phase):攻击者发送精心构造的请求来操纵堆布局,将
ngx_pool_t结构体放置在可预测的相对偏移位置。 - 溢出阶段(Overflow Phase):一个特制请求触发
rewrite/set缺陷,导致 Nginx 写入超出分配的堆缓冲区。溢出数据损坏相邻ngx_pool_t结构体的cleanup字段(一个函数指针)。 - 触发阶段(Trigger Phase):当被损坏的内存池在请求结束时被清理,Nginx 调用被劫持的
cleanup处理函数——执行攻击者控制的代码。
最关键的一点是:这是 无需认证 的漏洞。攻击者不需要有效的凭据、API 密钥或任何预先存在的服务器访问权限。只需向受影响的 Nginx 服务器发送恶意的 HTTP 请求即可触发。
为什么叫"Nginx Rift"(裂隙)?
"Rift"(裂隙)这个名称描述了 Nginx 内部状态机跟踪查询字符串参数的方式与 rewrite 模块实际处理方式之间的根本性脱节。这个"裂隙"在 18 年间横跨数百个版本从未被发现。
影响范围:谁应该关注?
考虑到 Nginx 的市场份额(全球约 30-35% 的网站运行在 Nginx 上),这个漏洞的爆炸半径巨大:
- Web 托管服务商 运行共享 Nginx 基础设施
- CDN 和反向代理部署 使用 Nginx
- API 网关 构建在 Nginx 之上
- Kubernetes 入口控制器(许多基于 Nginx)
- 云平台负载均衡 和应用交付控制器
- 自托管应用 使用 Nginx 作为 Web 服务器或反向代理
任何运行受影响 Nginx 版本并暴露了 rewrite 规则(即使是看似无害的规则)的组织,都应将此视为最高优先级的修补事件。
缓解与修复措施
立即行动(优先级 1)
- 立即升级:更新到 Nginx 1.31.0(主线版)或 1.30.1(稳定版)——这是首批包含修复的版本
- 确认版本:运行
nginx -v确认当前版本
临时缓解方案(如果无法立即修补)
- 禁用 rewrite 模块:如果部署中没有使用
rewrite指令,可以删除或注释掉所有 rewrite 规则作为临时缓解 - WAF 规则:部署 Web 应用防火墙规则,过滤针对 rewrite 指令的可疑查询字符串模式
- 缩小攻击面:限制对通过 rewrite 规则处理用户控制 URI 的 Nginx 端点的访问
⚠️ 重要提示:临时缓解措施可以降低风险,但无法消除风险。最有效的措施是升级到已修补版本。
各发行版更新方法
Ubuntu/Debian
sudo apt update
sudo apt list --upgradable nginx*
sudo apt upgrade nginx
# 或从官方 Nginx 仓库升级:
sudo nginx -v # 检查当前版本
# 按照 Nginx 官方仓库说明进行升级
RHEL/CentOS/Fedora
sudo yum update nginx
# 或更新版本:
sudo dnf update nginx
Docker
docker pull nginx:1.31.0
# 或者稳定版:
docker pull nginx:1.30.1
源码编译
wget https://nginx.org/download/nginx-1.31.0.tar.gz
tar -xzf nginx-1.31.0.tar.gz
cd nginx-1.31.0
./configure
make
sudo make install
入侵检测:如何判断是否已被攻击
以下是一些事后排查的迹象:
- 在
www-data或 Nginx worker 用户下出现意外进程 - Nginx worker 进程发起异常的出站网络连接
/tmp、/dev/shm或 Web 根目录中出现修改或新增文件- Nginx 访问日志中出现可疑条目(请求中带有异常长的查询字符串、重复模式或特定的 rewrite 触发 URI)
时间线
- 2008 年:漏洞在 Nginx 0.6.27 中被引入(rewrite 模块重构)
- 2026 年 5 月:DepthFirst AI 安全分析发现该漏洞
- 2026 年 5 月:Nginx 发布 1.31.0(主线版)和 1.30.1(稳定版),修复了 CVE-2026-42945 及其他三个内存损坏漏洞
- 2026 年 5 月 15 日:公开披露和 PoC 发布
常见问题
Nginx Plus 是否受影响?
是的。基于受影响版本(0.6.27 至 1.30.0)的 Nginx Plus 发行版同样存在漏洞。请联系 F5/Nginx 支持获取修补版本。
是否已经有人在利用这个漏洞?
截至披露日,尚无确认的在野利用报告。但鉴于高 CVSS 评分和 PoC 代码的公开,预计很快会出现大规模利用尝试。
我是否必须有 rewrite 规则才会受影响?
是的。利用需要 rewrite 模块处于活动状态并处理 rewrite 规则。但许多默认 Nginx 配置都包含 rewrite 规则(即使是通过框架或 CMS 平台隐式引入的)。
OpenResty、Tengine 等其他 Nginx 分支是否受影响?
如果这些发行版基于受影响版本范围,则可能同样存在漏洞。请向各自维护者确认是否有修补版本。
总结
CVE-2026-42945(Nginx Rift)是一个在 Nginx 中潜藏了超过 18 年的严重漏洞。由 AI 驱动的安全研究发现的这个漏洞,既是一个警告,也是一个典型案例:即使是最经过实战考验的基础设施软件,也可能在表面之下隐藏着灾难性的缺陷。
解决方法是明确的——立即升级到 Nginx 1.31.0 或 1.30.1。不要拖延,即使你认为你的 rewrite 规则是无害的。CVSS 9.2 的评分本身就反映了问题的严重性:未经认证、远程触发、具备完整的代码执行能力。这是一个刻不容缓的修补。