帖子详情
Furina头像
FurinaLv.9食量惊人饭桌上无敌手
5 个月前 中国–湖北–武汉 电信
置顶 1046

高危漏洞 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 就必然可利用”,还需要配置满足特定模式:

  1. 使用 rewrite 指令。
  2. rewrite 后面跟随另一个 rewrite、if 或 set 指令。
  3. rewrite 规则使用未命名 PCRE 捕获组,如 $1、$2。
  4. replacement 字符串中包含问号 ?。

典型风险模式:

nginx
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
set $something $1;

更安全的替代方式是使用命名捕获组:

nginx
rewrite ^/users/(?[0-9]+)/profile/(?.*)$ /profile.php?id=$user_id&tab=$section last;
set $something $user_id;

影响

  • 可导致 NGINX worker 进程崩溃并重启,形成拒绝服务风险。
  • 在 ASLR 禁用的系统上,存在远程代码执行可能。
  • 攻击面位于 HTTP 请求处理路径,不需要访问 NGINX 管理面或控制面。

解决方案

1. 立即升级

优先升级到修复版本,并重启 NGINX 使 worker 加载新二进制:

bash
nginx -v
nginx -V

Ubuntu / Debian 常见升级方式:

bash
sudo apt update
sudo apt install --only-upgrade nginx
sudo nginx -t
sudo systemctl restart nginx

RHEL / AlmaLinux / Rocky Linux 常见升级方式:

bash
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”的组合:

bash
sudo nginx -T | grep -nE 'rewrite|\\$[0-9]|\\?|\\b(if|set)\\b'

缓解原则:

  • 将 $1、$2 等未命名捕获组改为命名捕获组,如 (?...) 和 $name。
  • 避免在 rewrite replacement 中直接使用包含 ? 的复杂替换。
  • 拆分复杂 rewrite 逻辑,减少同一作用域中 rewrite、if、set 的连锁组合。
  • 修改后执行 nginx -t,确认配置语法正确,再 reload/restart。

3. 保持 ASLR 开启

ASLR 可降低代码执行可利用性。确认 Linux 系统未禁用 ASLR:

bash
cat /proc/sys/kernel/randomize_va_space

正常值通常应为 2。若为 0,表示 ASLR 被禁用,应评估并恢复。

建议处置优先级

  1. 互联网暴露的 NGINX:立即确认版本,优先升级或应用配置缓解。
  2. 使用复杂 rewrite 规则、PHP/FastCGI/反向代理入口的站点:重点排查。
  3. 容器、Ingress、Gateway Fabric、App Protect 等封装产品:按 F5 或发行版公告升级对应组件。
  4. 检查 ASLR 状态,避免把 DoS 风险放大为 RCE 风险。

参考来源

科技资讯1960 内容 · 1 关注

评论 8