漏洞概述 | |||
漏洞名称 | NGINX ngx_http_rewrite_module 堆缓冲区溢出漏洞 | ||
漏洞编号 | QVD-2026-26347,CVE-2026-42945 | ||
公开时间 | 2026-05-13 | 影响量级 | 万级 |
奇安信评级 | 高危 | CVSS 3.1分数 | 8.1 |
威胁类型 | 代码执行、拒绝服务 | 利用可能性 | 高 |
POC状态 | 已公开 | 在野利用状态 | 未发现 |
EXP状态 | 已公开 | 技术细节状态 | 已公开 |
危害描述:未经身份认证的攻击者可通过发送构造的 HTTP 请求触发漏洞,造成 Worker 进程崩溃,在特定环境下还可实现远程代码执行。 | |||
01 漏洞详情
影响组件
NGINX 是一款高性能、轻量级的开源 Web 服务器与反向代理服务,广泛用于静态资源托管、负载均衡、API 网关、缓存加速等场景,支持 HTTP/HTTPS、WebDAV、HTTP/3 等多种协议,具备高并发、低资源占用、模块化扩展等特性,是全球互联网主流的服务端基础软件,被政企、云厂商、互联网企业大量部署。ngx_http_rewrite_module 是 NGINX 的核心内置模块,用于基于 PCRE 正则表达式动态修改请求 URI、实现 URL 重写/重定向、条件路由及变量操作。
漏洞描述
近日,奇安信CERT监测到官方修复NGINX ngx_http_rewrite_module 堆缓冲区溢出漏洞(CVE-2026-42945),该漏洞源于处理特定 rewrite 指令时,由于内部标志位管理错误,导致堆缓冲区分配长度与实际写入长度不一致,从而引发堆缓冲区溢出。未经身份认证的攻击者可通过发送构造的 HTTP 请求触发漏洞,造成 Worker 进程崩溃,在特定环境下还可实现远程代码执行。该漏洞影响自 0.6.27 至 1.30.0 的绝大部分 NGINX 版本,已在代码库中存在长达 18 年。目前该漏洞PoC和技术细节已公开。鉴于该漏洞影响范围较大,建议客户尽快做好自查及防护。
利用条件
在 Nginx 的配置中,必须存在一个 rewrite 指令,并且该指令同时满足:
1. 使用了未命名的 PCRE 正则捕获(例如 $1, $2 等)。
2. 其替换字符串中包含问号(?)。
3. 在此 rewrite 指令之后,紧跟着另一个 rewrite、if 或 set 指令。
02 影响范围
影响版本
1.0.0 <= NGINX Open Source <= 1.30.0
0.6.27 <= NGINX Open Source <= 0.9.7
R32 <= NGINX Plus < R32 P6
R36 <= NGINX Plus < R36 P4
其他受影响组件
2.16.0 <= NGINX Instance Manager <= 2.21.1
5.9.0 <= F5 WAF for NGINX <= 5.12.1
4.9.0 <= NGINX App Protect WAF <= 4.16.0
5.1.0 <= NGINX App Protect WAF <= 5.8.0
F5 DoS for NGINX 4.8.0
4.3.0 <= NGINX App Protect DoS <= 4.7.0
1.3.0 <= NGINX Gateway Fabric <= 1.6.2
2.0.0 <= NGINX Gateway Fabric <= 2.5.1
3.5.0 <= NGINX Ingress Controller <= 3.7.2
4.0.0 <= NGINX Ingress Controller <= 4.0.1
5.0.0 <= NGINX Ingress Controller <= 5.4.1
03 复现情况
目前,奇安信威胁情报中心安全研究员已成功复现NGINX ngx_http_rewrite_module 堆缓冲区溢出漏洞(CVE-2026-42945),截图如下:

04 处置建议
安全更新
官方已发布安全补丁,请及时更新至最新版本:
NGINX Open Source 1.* >= 1.31.0
NGINX Open Source 1.* >= 1.30.1
NGINX Plus R32 >= R32 P6
NGINX Plus R36 >= R36 P4
其他衍生组件(Instance Manager、WAF、Ingress Controller 等):升级至已修复版本,或迁移到含修复的基础 NGINX 版本。
升级后重启 NGINX,确保 Worker 进程加载修复后二进制。
下载地址:
https://my.f5.com/manage/s/article/K000161019
缓解措施:
将所有受影响 rewrite 指令中未命名捕获组($1、$2)替换为命名捕获组。
易受攻击示例:
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;修复后示例:
rewrite ^/users/(?[0-9]+)/profile/(?.*)$ /profile.php?id=$user_id&tab=$section last; 05 参考资料
[1]https://my.f5.com/manage/s/article/K000161019
声明:本文来自奇安信 CERT,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。