NGINX 9.2分高危漏洞深度解读:潜伏18年的“灰犀牛”事件

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,且替换字符串中含有问号?),系统在第一遍计算长度时没有计入特殊字符(如“+”、“%”、“&”)转义后的字节膨胀,导致分配的内存不足。在第二遍实际写入数据时,数据量超出缓冲区边界,造成溢出。

攻击者需要具备的条件与可能的后果如下:

  1. 拒绝服务(DoS):攻击者无需任何认证,只需发送一个精心构造的 HTTP 请求,即可导致 NGINX 工作进程崩溃。虽然主进程会立即拉起重启,但这种频繁的崩溃会严重影响业务连续性。

  2. 远程代码执行(RCE):在关闭 ASLR(地址空间布局随机化)的旧版或嵌入式 Linux 系统上,攻击者可利用此漏洞获取服务器控制权。虽然现代操作系统默认开启 ASLR 增加了利用难度,但研究人员指出,攻击者可能通过重复请求进行“暴力试探”,配合 NGINX 多进程重启后堆布局相对固定的特性,存在绕过 ASLR 的理论可能。

  1. 18年前的代码为何现在才发现?
    该漏洞隐藏在复杂的 rewrite 逻辑中,且触发条件依赖特定的配置组合。由于过去代码审计多依赖人工审查或通用的模糊测试,这种隐蔽的逻辑漏洞难以被察觉。直到 depthfirst 使用了针对该模块的深度自动化分析工具才得以暴露。

  2. 漏洞利用真的难以防范吗?
    是的,且非常隐蔽。漏洞利用流量并非典型的畸形攻击载荷,而是符合 HTTP 规范的“合法”请求,这使得传统的 Web 应用防火墙(WAF)可能难以识别和拦截。

  3. 为什么我的服务器没开 ASLR 就极其危险?
    ASLR 是防范内存漏洞的最后一道防线。在生产环境中,如果因为老旧系统兼容性、特定容器配置或嵌入式设备需求而关闭了 ASLR,这个 9.2 分的漏洞将直接导致攻击者“通杀”整台服务器。

  4. 临时缓解措施会不会影响业务?
    官方建议将 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 防护规则。


相关推荐