帖子

高危漏洞 CVE-2026-42945 Nginx Rift 堆缓冲区溢出漏洞

Global Sticky

漏洞名称:NGINX Rift
CVE 编号:CVE-2026-42945
漏洞类型:堆缓冲区溢出(CWE-122)
影响模块:ngx_http_rewrite_module
认证要求:无需认证,网络可达即可触发

结论摘要

CVE-2026-42945 是 NGINX / NGINX Plus 的 ngx_http_rewrite_module 中的堆缓冲区溢出漏洞。漏洞触发需要满足特定配置条件:rewrite 指令后面跟随 rewriteifset 指令,并且 rewrite 使用未命名 PCRE 捕获组(如 $1$2),替换字符串中还包含问号 ?

攻击者可通过构造 HTTP 请求触发 NGINX worker 进程堆溢出,导致 worker 重启;在禁用 ASLR 的系统上,存在代码执行可能。

建议优先升级到修复版本:NGINX Open Source 1.30.11.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.271.30.0 1.30.11.31.0+

NGINX Plus

产品 官方 CVE 记录中的受影响范围 修复版本 / 不受影响版本
NGINX Plus R32 R32R32 P5 R32 P6
NGINX Plus R36 R36R36 P3 R36 P4
NGINX Plus R37 不受影响 R37

注意:部分第三方资料将 NGINX Plus 概括为 R32R36 受影响。正式处置时应以 F5 官方公告 K000161019 和厂商包版本为准。

相关 F5 / NGINX 产品

研究者和第三方资料还列出以下产品线可能受影响,需按 F5 官方公告核对具体版本和升级路径:

产品 第三方资料列出的受影响范围
NGINX Instance Manager 2.16.02.21.1
F5 WAF for NGINX 5.9.05.12.1
NGINX App Protect WAF 4.9.04.16.05.1.05.8.0
F5 DoS for NGINX 4.8.0
NGINX App Protect DoS 4.3.04.7.0
NGINX Gateway Fabric 1.3.01.6.22.0.02.5.1
NGINX Ingress Controller 3.5.03.7.24.0.04.0.15.0.05.4.1

不受影响或已修复版本

  • NGINX Open Source:1.30.11.31.0+
  • NGINX Plus:R32 P6R36 P4R37
  • 已达到技术支持结束(EoTS)的软件版本,官方 CVE 记录未做完整评估。

触发条件

漏洞不是“只要安装 NGINX 就必然可利用”,还需要配置满足特定模式:

  1. 使用 rewrite 指令。
  2. rewrite 后面跟随另一个 rewriteifset 指令。
  3. rewrite 规则使用未命名 PCRE 捕获组,如 $1$2
  4. 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.11.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 被禁用,应评估并恢复。

建议处置优先级

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

参考来源

https://www.fireself.cn/post/2PERnCMY

未登录无法操作

评论 2

上滑加载更多
须弥技术

专业PHP开发,运维技术社区

打开 App