一个存在了18年的代码缺陷,直到本周才被安全团队正式披露。
研究人员称,攻击者无需登录认证,只需发送一条特制HTTP请求,就能让NGINX工作进程崩溃;在合适条件下,还可能拿到服务器远程代码执行权限。
CVE-2026-42945可追溯到2008年,长期存在于几乎所有标准NGINX构建版本中。由于NGINX承载全球约三分之一的网站,这次事件影响面尤其大。
问题出在ngx_http_rewrite_module的处理逻辑。某个内部标志位被设为参数转义状态后没有清掉,后续长度计算按原始字节数估算,但真正写入时却再次转义。
研究人员称,这样一来,攻击者URI中的“+”“%”“&”等字符会从1字节膨胀到3字节,原本够用的缓冲区就会溢出。
depthfirst已做出可运行的概念验证,显示在关闭ASLR的条件下可实现未认证RCE(远程代码执行)。报告还提到一种理论方法,称攻击者可通过重复请求逐步覆盖指针字节,从而尝试绕过ASLR。
更麻烦的是,NGINX的多进程架构在这里反而给了攻击者反复试错机会:某个工作进程崩溃后,主进程会拉起新进程,且堆布局可能保持一致。
修复方面,NGINX Open Source需升级到1.31.0或1.30.1,NGINX Plus需升级到R36P4或R32P6,并重启服务加载修复后的二进制文件。
如果暂时没法升级,官方给出的缓解办法是,把受影响rewrite规则中的未命名正则捕获改成命名捕获。原文称,命名捕获不会走到有问题的转义路径,因此能移除当前攻击面。
简单说,此漏洞是rewrite模块引发的安全隐患,黑客只要访问特殊的URL,就能导致NGINX崩溃。如果未使用rewrite(伪静态),则不用担心此漏洞。
对于Nginx的远程代码执行隐患,部署护卫神.防入侵系统就能解决,其默认自带Nginx防护规则,在“进程防护”模块中可以查看到。

(Nginx防护,防止远程代码执行)