Nginx 这种"稳如老狗"的软件,也能出 18 年没人发现的老洞。

CVE-2026-42945,代号 NGINX Rift,出在 ngx_http_rewrite_module 里——一段 2008 年就写进去的代码,堆缓冲区溢出。影响范围让人头皮发麻:开源版 0.6.27 到 1.30.0 几乎全系,Nginx Plus R32–R36。一个未授权的攻击者,发一个精心构造的请求就能把 worker 打崩;如果目标关了 ASLR,理论上还能一路走到 RCE。CVSS 社区口径 9.2。

好在触发条件不宽,就三条,凑齐了才炸:

  1. rewrite 的替换串里用了未命名捕获($1、$2 这种);
  2. 替换串里带了 ?;
  3. 同一个上下文里,这条 rewrite 后面还跟着另一条 rewrite / if / set。

所以临时缓解特别"运维":把未命名捕获改成命名捕获((?<name>…) 配 $name),能立刻躲开。条件不满足就不触发,很多用不到的配置其实天生免疫。

修复版本是开源 1.30.1+(1.31.x 也行)。有三个坑得提前说:一是要 restart,不能只 reload;二是 Debian 这类稳定发行版仓库里常常还是老上游 + 回填补丁,别只看主版本号就以为没事了;三是 K8s 里跑的 ingress-nginx 得单独查,容器里的版本和宿主机没有半点关系。公开 PoC 已经有了,能用"堆溢出 + 同主机常见的文件读取"拼出一条绕 ASLR 的利用链。

这事搁平时,就是个"连夜升级"的运维故事。但它赶上今年的大背景,就很值得说道说道:FIRST 的年中报告,把 2026 年全年 CVE 预测从 59,427 上调到了约 66,000 个;1–4 月实际披露比预估多了 6,420 个,涨了 46.3%。推手有三个:AI 辅助漏洞挖掘、GitHub 安全通报同比 +449%、VulnCheck 这类"最后手段 CNA"的发号量同比涨了 3119%。

可最有意思的是后半句:被实际利用的、或者真正高威胁的漏洞,比例并没有跟着一起涨。 漏洞数量在爆炸,但真正要命的还是那一小撮。这意味着,堆人力去"逐个修"性价比越来越低——筛查(EPSS 打分、CISA KEV 已知利用清单)比闷头推进度重要得多。

我自己的土办法:拿到一批 CVE,先分三桶——"在野利用的、我确实暴露在公网的、版本真的命中的",优先这三类的交集;剩下的,排期,别慌。

Nginx 是大家伙,这类洞不能等。今年 Nginx 相关的翻车我已经写过一回(nginx-ui 面板那批 CVE),K8s 那边的自查清单也整理过(低权限打穿集群那篇),套路都是通的:先搞清"我到底暴露了什么",再谈补丁。想系统过一遍配置和加固清单,官网页那份说明书可以对着比。

回来说 NGINX Rift。配置里要是真有 $1 带 ?、后面又跟着 rewrite 的,别犹豫,要么改命名捕获,要么升到 1.30.1 以上,记得是 restart。一个跑了 18 年的洞,通常不是没人发现,是没人去那个角落看——包括我自己,前阵子翻别人的 rewrite 配置,第一眼也是先扫向那几个热门的 location。