NGINX Rift(CVE-2026-42945):rewrite 模块堆溢出漏洞与修复

NGINX Rift(CVE-2026-42945)是 nginx rewrite 模块中的严重堆溢出漏洞,影响 0.6.27 到 1.30.0 版本,攻击者通过一个精心构造的请求即可让 worker 进程崩溃,未启用 ASLR 的系统还可能被远程代码执行。本文整理漏洞原理、受影响范围、升级与临时缓解方案。

阅读时长: 2 分钟
共 1002字
作者: eimoon.com

AlmaLinux 安全团队在 2026-05-13 披露了一个被命名为 NGINX Rift 的严重漏洞,编号 CVE-2026-42945。它存在于 nginx 的 rewrite 模块中,是一个堆缓冲区溢出(CWE-122),CVSS 4.0 评分 9.2(Critical),CVSS 3.1 为 8.1(High)。

受影响版本范围非常广:0.6.27 到 1.30.0,几乎覆盖了过去十多年所有还在线上跑的 nginx 实例。

漏洞原理

漏洞触发的关键是 rewrite 模块在处理替换字符串时两次遍历的长度计算不一致

具体条件如下:

  1. 一条 rewrite 指令中,使用了未命名的 PCRE 捕获组(如 $1$2);
  2. 替换字符串里出现了问号 ?
  3. 后面紧跟着另一条 rewrite / if / set 指令。

在这种组合下,nginx 第一次扫描时计算出的缓冲区大小,与第二次实际写入时所需的大小对不上。原因在于 +%& 等字符在再次转义时会膨胀,导致写操作越过分配的内存边界——这就是经典的堆溢出。

影响

  • DoS 路径非常容易触发:根据官方描述,“一个精心构造的请求就能稳定地把目标 worker 进程打崩”。
  • RCE 风险:在未启用 ASLR 的系统上,攻击者有可能借此实现远程代码执行。
  • AlmaLinux 8 / 9 / 10 全系,只要 nginx 配置中包含易受攻击的 rewrite 写法,就在影响范围内。

对于直接暴露在公网、且 rewrite 规则比较复杂的实例,应该把它当成紧急事件处理。

升级修复

截至 2026-05-14,AlmaLinux 已经在生产仓库中发布了修复包,覆盖范围比 Red Hat 上游更广,连一些已经 EOL 的 nginx stream 也一并打了补丁:

  • AlmaLinux 8:默认包与 module streams 1.16 / 1.18 / 1.20 / 1.22 / 1.24
  • AlmaLinux 9:默认包与 module streams 1.24 / 1.26
  • AlmaLinux 10 / Kitten 10:默认包

执行升级:

sudo dnf clean metadata && sudo dnf upgrade nginx
sudo systemctl restart nginx

临时缓解方案

如果暂时无法升级,可以通过改写配置来规避触发条件:把所有未命名捕获组换成命名捕获组

漏洞写法:

rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2;

缓解写法:

rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section;

逻辑上等价,但因为绕开了未命名捕获 + ? 的组合,不会再走到那条有 bug 的路径上。

小结

  • 漏洞:nginx rewrite 模块堆溢出,CVE-2026-42945
  • 影响版本:0.6.27 – 1.30.0
  • 风险:单请求即可 DoS,特定条件下可 RCE
  • 修复dnf upgrade nginx 后重启服务
  • 临时缓解:把 $1$2 改成命名捕获 (?<name>...)

公网暴露的 nginx 实例建议立即升级,内网或反向代理后的实例也尽快安排维护窗口。

关于

本文基于 AlmaLinux 安全公告整理:https://almalinux.org/blog/2026-05-13-nginx-rift-cve-2026-42945/,原文作者 Jonathan Wright(Infrastructure SIG Lead & ALESCo Member)。

关注我获取更多资讯

月球基地博客公众号二维码,扫码关注获取更多 AI 与编程资讯
📢 公众号
月球基地博客作者个人微信二维码,扫码交流 AI 与编程话题
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计