谈到互联网的基础骨架,NGINX 这个反向代理服务器绝对是绕不开的名字。就在最近,一个潜伏了足足18年的高危漏洞被安全研究人员公之于众。更糟糕的是,攻击者甚至不需要任何身份认证,只要发出一条精心构造的 HTTP 请求,就有可能远程控制你的服务器。
当地时间5月13日,F5 公司正式发布安全公告,确认编号为 CVE-2026-42945 的堆缓冲区溢出漏洞存在。这枚“老地雷”在 CVSS v4 评分体系中拿下了 9.2 分的惊人成绩,波及范围从 2008 年至今几乎所有的 NGINX 版本,以及大量基于它的衍生产品。
更让人不安的是,发现漏洞的 depthfirst 安全团队已经在 GitHub 上公开了完整的概念验证(PoC)代码。留给管理员们的时间,真的不多了。

一枚藏在脚本引擎里的“老地雷”
漏洞的根源,位于 NGINX 的 ngx_http_rewrite_module 模块。这个模块在绝大多数标准 NGINX 配置中都是默认启用的核心组件。问题出在内部脚本引擎处理 URI 重写时的一个“两次扫描”逻辑缺陷上。
研究员 Zhenpeng (Leo) Lin 对此的解释很形象:脚本引擎会先进行一次“预演”,计算出最终字符串需要的内存长度,然后再老老实实地进行数据复制。麻烦就出现在这里——当一条 rewrite 指令的替换字符串末尾带着一个问号时,会永久性地把一个叫做 is_args 的内部标志置为有效。紧接着,如果后续的 set 指令使用了未命名的 PCRE 捕获组(比如 $1、$2),在长度计算阶段,引擎就会错误地以为不需要进行 URI 转义,于是分配了一块刚好能装下“原始”字符串的缓冲区。但在实际写入阶段,因为 is_args 标志依然坚挺,ngx_escape_uri 函数会对特殊字符进行转义,导致数据“膨胀”,直接冲出了刚分配好的那点堆内存。
用研究员自己的话说就是:“内存是按未转义的长度申请的,写的却是转义后膨胀了的字符串,多余的字节全部溢出。”
更棘手的是,NGINX 采用的是“主进程派生工作进程”的多进程架构,各个工作进程的内存布局长得一模一样。这意味着对于攻击者而言,堆布局是完全可以预测的。这不仅能让攻击者稳定地造成工作进程崩溃(拒绝服务),在某些禁用了地址空间布局随机化(ASLR)的系统上,甚至能不费吹灰之力实现远程代码执行(RCE),全程无需任何认证。
如何判断自己是否中招?
这个漏洞的历史可以追溯到 2008 年发布的 NGINX 0.6.27 版本,一路潜伏至今。只要你的配置中同时存在以下两种模式的指令,风险就已经被激活:
rewrite 指令的替换字符串以问号结尾;
- 紧随其后的
rewrite、if 或 set 指令中使用了未命名的正则捕获组(比如 $1、$2)。
一个典型的存在风险的配置示例如下:
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
不仅是 NGINX 开源版(0.6.27 至 1.30.0)和商业版 NGINX Plus(R32 至 R36),一大批周边产品也未能幸免,包括 NGINX Ingress Controller、NGINX Gateway Fabric、NGINX App Protect WAF、F5 DoS for NGINX 等一系列企业级组件。
全球互联网中,有将近 3 成的网站服务器或反向代理核心使用的是 NGINX。这意味着此次漏洞的影响面极其广泛,堪称“关键基础设施级”的威胁。
立即升级,或改用“命名捕获”
官方补丁获取地址:https://nginx.org
F5 已经发布了修复方案,将漏洞修补在 NGINX Open Source 1.30.1 和 1.31.0,以及 NGINX Plus R32 P6、R36 P4 等版本中。所有受影响的产品线都已获得了对应的补丁版本。
如果暂时无法立即升级,这里有一条可操作的临时缓解措施:将所有受影响 rewrite 指令中的未命名捕获($1, $2...)替换为命名捕获。例如,将上面那段危险配置修改为:
rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;
这能从配置层面直接瓦解漏洞的触发路径。
此外,本次更新还一并修复了另外三个中高危漏洞(CVE-2026-42946、CVE-2026-40701、CVE-2026-42934),涉及内存过度分配、释放后使用(UAF)以及越界读取等问题,同样建议一并处置。
对于任何直接或间接“裸露”在公网上的 NGINX 服务,现在的动作是越快越好——要么升级,要么立刻改写你的配置。
资讯来源:F5 安全公告 K000160932、depthfirst 安全团队披露