CVE-2026-42945 (Nginx Rift):潜伏 18 年的堆缓冲区溢出 RCE 漏洞完全指南

漏洞概述

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_argsargs 字段可能发生不同步。关键缺陷在于:当 rewrite 规则触发内部重定向并修改查询字符串参数时,is_args 标志未能正确传播到 ngx_http_core_run_phases() 函数。这创建了一个窗口期,导致内存分配基于错误的缓冲区大小假设。

受影响的代码路径涉及在 rewrite 上下文中使用 set $args 指令。攻击者通过控制请求 URI 和查询字符串,可以构造触发出这种不同步的输入。

利用原理:跨请求堆风水(Cross-Request Heap Feng Shui)

漏洞利用分为多个阶段,跨越多个独立的 HTTP 请求:

  1. 喷洒阶段(Spray Phase):攻击者发送精心构造的请求来操纵堆布局,将 ngx_pool_t 结构体放置在可预测的相对偏移位置。
  2. 溢出阶段(Overflow Phase):一个特制请求触发 rewrite/set 缺陷,导致 Nginx 写入超出分配的堆缓冲区。溢出数据损坏相邻 ngx_pool_t 结构体的 cleanup 字段(一个函数指针)。
  3. 触发阶段(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 的评分本身就反映了问题的严重性:未经认证、远程触发、具备完整的代码执行能力。这是一个刻不容缓的修补。

← 返回博客