2026年5月13日,安全研究团队 depthfirst 与 NGINX 官方(F5)联合披露了一组存在于 NGINX 产品中的高危漏洞。此次事件的关键时间节点与事实如下:
发现过程:2026年4月,depthfirst 利用自动化审计系统对 NGINX 代码库进行扫描,在短短6小时内发现了5个潜在问题,其中4个获得了官方的确认。
核心漏洞:编号 CVE-2026-42945,CVSS v4.0 评分高达 9.2分(严重级别)。该漏洞存在于核心模块
ngx_http_rewrite_module中。潜伏时长:漏洞代码最早可追溯至 2008年 发布的 NGINX 0.6.27 版本,在代码库中潜伏了长达 18年 之久。
影响范围:全球约有 1/3 的网站服务器使用 NGINX,涉及版本覆盖开源版(0.6.27 至 1.30.0)及商业版(NGINX Plus R32 至 R36),甚至波及了 NGINX Ingress Controller 等云原生组件。
该漏洞被定性为“堆缓冲区溢出”(Heap Buffer Overflow)。其根源在于 NGINX 脚本引擎在处理 URL 重写(rewrite)时的“两遍执行逻辑”存在不一致。
通俗来说,当配置文件中满足特定条件时(如 rewrite 指令搭配未命名正则捕获$1,且替换字符串中含有问号?),系统在第一遍计算长度时没有计入特殊字符(如“+”、“%”、“&”)转义后的字节膨胀,导致分配的内存不足。在第二遍实际写入数据时,数据量超出缓冲区边界,造成溢出。
攻击者需要具备的条件与可能的后果如下:
拒绝服务(DoS):攻击者无需任何认证,只需发送一个精心构造的 HTTP 请求,即可导致 NGINX 工作进程崩溃。虽然主进程会立即拉起重启,但这种频繁的崩溃会严重影响业务连续性。
远程代码执行(RCE):在关闭 ASLR(地址空间布局随机化)的旧版或嵌入式 Linux 系统上,攻击者可利用此漏洞获取服务器控制权。虽然现代操作系统默认开启 ASLR 增加了利用难度,但研究人员指出,攻击者可能通过重复请求进行“暴力试探”,配合 NGINX 多进程重启后堆布局相对固定的特性,存在绕过 ASLR 的理论可能。
18年前的代码为何现在才发现?
该漏洞隐藏在复杂的 rewrite 逻辑中,且触发条件依赖特定的配置组合。由于过去代码审计多依赖人工审查或通用的模糊测试,这种隐蔽的逻辑漏洞难以被察觉。直到 depthfirst 使用了针对该模块的深度自动化分析工具才得以暴露。漏洞利用真的难以防范吗?
是的,且非常隐蔽。漏洞利用流量并非典型的畸形攻击载荷,而是符合 HTTP 规范的“合法”请求,这使得传统的 Web 应用防火墙(WAF)可能难以识别和拦截。为什么我的服务器没开 ASLR 就极其危险?
ASLR 是防范内存漏洞的最后一道防线。在生产环境中,如果因为老旧系统兼容性、特定容器配置或嵌入式设备需求而关闭了 ASLR,这个 9.2 分的漏洞将直接导致攻击者“通杀”整台服务器。临时缓解措施会不会影响业务?
官方建议将 rewrite 规则中的 未命名捕获(如$1,$2)改为 命名捕获。这一修改是安全的,能从根本上避开有缺陷的代码执行路径,且不会改变原本的 URL 重写逻辑,但这需要运维人员仔细排查全站配置。
由于漏洞利用概念验证代码(PoC)已在 GitHub 等平台公开,窗口期正在快速缩短,建议立即采取以下措施:
方案一:彻底升级(强烈推荐)
开源版(Open Source):立即升级至 1.31.0 或 1.30.1 版本。
商业版(Plus):立即升级至 R36 P4 或 R32 P6 版本。
注意:升级后必须执行
nginx -s reload或完全重启服务,以加载修复后的二进制文件。
方案二:配置级热修复(无法立即重启时)
检查配置:使用
grep命令检查nginx.conf中是否存在未命名正则捕获与问号共存的 rewrite 规则。修改规则:将受影响的规则中的
$1、$2等变量改为命名捕获变量(如$name),确保解析路径不触发转义计算错误。
方案三:防御规避
在 NGINX 前端部署具备虚拟补丁能力的 WAF,并关注厂商推送的特定 CVE 防护规则。
