互联网的基础设施之一 NGINX,被爆出一个潜伏了 18 年的高危安全漏洞。
安全研究公司披露,编号为 CVE-2026-42945 的漏洞存在于 NGINX 的脚本引擎中。这是一个堆缓冲区溢出问题,攻击者只需发送一个精心构造的 HTTP 请求,就能远程拿下服务器。
考虑到 NGINX 在全球网站服务器和反向代理领域的占有率接近 30%,这个漏洞的影响范围堪称灾难级。

18 年前的代码,今天的雷
这个漏洞最早引入于 2008 年发布的 NGINX 0.6.27 版本。
它之所以能潜伏这么久,是因为触发条件非常隐蔽。只有当 NGINX 配置文件中同时出现以下两种指令时,漏洞才会被激活:
rewrite规则末尾带问号?(例如:rewrite ^/api/(.*)$ /internal?migrated=true;)- 使用正则捕获组的
set指令(例如:set $original_endpoint $1;)
技术根源:长度计算的“时空错乱”
研究团队指出,问题出在 ngx_http_rewrite_module 的脚本引擎 (ngx_http_script.c) 中。
当 rewrite 指令带问号时,引擎会设置一个持久的 is_args 标志。但在后续处理 set 指令时,引擎使用了一个新的、清零的子引擎来计算长度。这个子引擎跳过了 URL 转义逻辑,导致计算出的缓冲区长度偏小。
然而,在实际复制阶段,系统又切换回主引擎,调用 ngx_escape_uri 函数对 +、& 等字符进行转义。结果就是:缓冲区按“未转义”的短长度分配,却写入了“转义后”膨胀的内容,最终导致可控的堆缓冲区溢出。
谁受影响?
- NGINX 开源版:0.6.27 ~ 1.30.0 所有版本。
- F5 商业产品:NGINX WAF、F5 WAF、NGINX Gateway Fabric、NGINX Ingress Controller 等衍生产品。
如何修复?
F5 已迅速发布修复版本。
- 开源用户:请立即升级到 NGINX 1.30.1 或 1.31.0。
- 商业用户:请参照 F5 官方公告,升级对应的衍生产品版本。
写在最后
18 年,对于一个软件项目来说几乎是半辈子。这个漏洞的发现再次提醒我们:代码中的“幽灵”可能随时会在最意想不到的地方苏醒。
对于运维团队来说,这次升级不是可选项,而是必选项。哪怕你的配置里现在没有那两行特定的指令,也无法保证未来不会有人加上,或者不被攻击者通过其他路径诱导触发。
赶紧检查你的 NGINX 版本吧。毕竟,在互联网世界里,安全感来自于及时的补丁,而不是侥幸。










