高危漏洞 CVE-2026-42945 Nginx Rift 堆缓冲区溢出漏洞
漏洞名称:NGINX Rift
CVE 编号:CVE-2026-42945
漏洞类型:堆缓冲区溢出(CWE-122)
影响模块:ngx_http_rewrite_module
认证要求:无需认证,网络可达即可触发
结论摘要
CVE-2026-42945 是 NGINX / NGINX Plus 的 ngx_http_rewrite_module 中的堆缓冲区溢出漏洞。漏洞触发需要满足特定配置条件:rewrite 指令后面跟随 rewrite、if 或 set 指令,并且 rewrite 使用未命名 PCRE 捕获组(如 $1、$2),替换字符串中还包含问号 ?。
攻击者可通过构造 HTTP 请求触发 NGINX worker 进程堆溢出,导致 worker 重启;在禁用 ASLR 的系统上,存在代码执行可能。
建议优先升级到修复版本:NGINX Open Source 1.30.1 或 1.31.0+;NGINX Plus 升级到对应补丁版本。若无法立即升级,应先调整 rewrite 配置,避免未命名捕获组与包含 ? 的替换字符串组合。
官方评分
| 指标 | 评分 | 向量 |
|---|---|---|
| CVSS v4.0 | 9.2 / Critical | CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| CVSS v3.1 | 8.1 / High | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
说明:NVD 当前状态为 Awaiting Analysis,评分来自 CNA/F5 记录。
受影响版本
NGINX Open Source
| 产品 | 受影响版本 | 修复版本 |
|---|---|---|
| NGINX Open Source | 0.6.27 至 1.30.0 |
1.30.1、1.31.0+ |
NGINX Plus
| 产品 | 官方 CVE 记录中的受影响范围 | 修复版本 / 不受影响版本 |
|---|---|---|
| NGINX Plus R32 | R32 至 R32 P5 |
R32 P6 |
| NGINX Plus R36 | R36 至 R36 P3 |
R36 P4 |
| NGINX Plus R37 | 不受影响 | R37 |
注意:部分第三方资料将 NGINX Plus 概括为 R32 至 R36 受影响。正式处置时应以 F5 官方公告 K000161019 和厂商包版本为准。
相关 F5 / NGINX 产品
研究者和第三方资料还列出以下产品线可能受影响,需按 F5 官方公告核对具体版本和升级路径:
| 产品 | 第三方资料列出的受影响范围 |
|---|---|
| NGINX Instance Manager | 2.16.0 至 2.21.1 |
| F5 WAF for NGINX | 5.9.0 至 5.12.1 |
| NGINX App Protect WAF | 4.9.0 至 4.16.0、5.1.0 至 5.8.0 |
| F5 DoS for NGINX | 4.8.0 |
| NGINX App Protect DoS | 4.3.0 至 4.7.0 |
| NGINX Gateway Fabric | 1.3.0 至 1.6.2、2.0.0 至 2.5.1 |
| NGINX Ingress Controller | 3.5.0 至 3.7.2、4.0.0 至 4.0.1、5.0.0 至 5.4.1 |
不受影响或已修复版本
- NGINX Open Source:
1.30.1、1.31.0+ - NGINX Plus:
R32 P6、R36 P4、R37 - 已达到技术支持结束(EoTS)的软件版本,官方 CVE 记录未做完整评估。
触发条件
漏洞不是“只要安装 NGINX 就必然可利用”,还需要配置满足特定模式:
- 使用
rewrite指令。 rewrite后面跟随另一个rewrite、if或set指令。- rewrite 规则使用未命名 PCRE 捕获组,如
$1、$2。 - replacement 字符串中包含问号
?。
典型风险模式:
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
set $something $1;
更安全的替代方式是使用命名捕获组:
rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;
set $something $user_id;
影响
- 可导致 NGINX worker 进程崩溃并重启,形成拒绝服务风险。
- 在 ASLR 禁用的系统上,存在远程代码执行可能。
- 攻击面位于 HTTP 请求处理路径,不需要访问 NGINX 管理面或控制面。
解决方案
1. 立即升级
优先升级到修复版本,并重启 NGINX 使 worker 加载新二进制:
nginx -v
nginx -V
Ubuntu / Debian 常见升级方式:
sudo apt update
sudo apt install --only-upgrade nginx
sudo nginx -t
sudo systemctl restart nginx
RHEL / AlmaLinux / Rocky Linux 常见升级方式:
sudo dnf clean metadata
sudo dnf upgrade nginx
sudo nginx -t
sudo systemctl restart nginx
源码或宝塔等自定义编译安装环境,应通过对应面板或源码编译方式升级到 1.30.1 或 1.31.0+,并确认实际运行的 nginx 二进制版本。
2. 无法立即升级时的临时缓解
检查 NGINX 配置中是否存在“未命名捕获组 + 问号 + 后续 rewrite/if/set”的组合:
sudo nginx -T | grep -nE 'rewrite|\\$[0-9]|\\?|\\b(if|set)\\b'
缓解原则:
- 将
$1、$2等未命名捕获组改为命名捕获组,如(?<name>...)和$name。 - 避免在 rewrite replacement 中直接使用包含
?的复杂替换。 - 拆分复杂 rewrite 逻辑,减少同一作用域中 rewrite、if、set 的连锁组合。
- 修改后执行
nginx -t,确认配置语法正确,再 reload/restart。
3. 保持 ASLR 开启
ASLR 可降低代码执行可利用性。确认 Linux 系统未禁用 ASLR:
cat /proc/sys/kernel/randomize_va_space
正常值通常应为 2。若为 0,表示 ASLR 被禁用,应评估并恢复。
建议处置优先级
- 互联网暴露的 NGINX:立即确认版本,优先升级或应用配置缓解。
- 使用复杂 rewrite 规则、PHP/FastCGI/反向代理入口的站点:重点排查。
- 容器、Ingress、Gateway Fabric、App Protect 等封装产品:按 F5 或发行版公告升级对应组件。
- 检查 ASLR 状态,避免把 DoS 风险放大为 RCE 风险。
参考来源
- CVE.org API:https://cveawg.mitre.org/api/cve/CVE-2026-42945
- NVD:https://nvd.nist.gov/vuln/detail/CVE-2026-42945
- F5 官方公告 K000161019:https://my.f5.com/manage/s/article/K000161019
- depthfirst 技术说明:https://depthfirst.com/nginx-rift
- AlmaLinux 公告:https://almalinux.org/blog/2026-05-13-nginx-rift-cve-2026-42945/
- Tenable CVE 页面:https://www.tenable.com/cve/CVE-2026-42945