运行 NGINX Open Source、NGINX Plus 或基于 NGINX 的 Ingress/控制器的组织,应确认其是否受到 CVE-2026-42945 的影响,并在利用尝试触及生产边缘之前进行修补或重新配置。
本仓库提供了一个只读、非利用的扫描器,供你在自有或获准测试的系统上进行授权的防御性使用。
| 项目 | 详情 |
|---|---|
| CVE | CVE-2026-42945 |
| 名称 | NGINX Rift |
| 组件 | ngx_http_rewrite_module(堆缓冲区溢出) |
| 受影响版本 | NGINX Open Source 0.6.27 至 1.30.0 |
| 已修复版本 | 1.30.1、1.31.0(+ 厂商反向移植) |
| CVSS | 9.2(严重) |
利用需要特定的 rewrite 配置:
$1、$2、…)的 rewrite 指令?server/location 作用域中的另一个 rewrite、if 或 set 使用该捕获影响:
| 检查项 | 方法 |
|---|
它不会发送构造的漏洞利用请求,也不会尝试使 worker 崩溃。
cd nginx-cve-2026-42945
chmod +x scan_nginx_rift.py
# Best: run on each NGINX host with sudo
sudo python3 scan_nginx_rift.py --local
# Or scan a full config dump
sudo nginx -T 2>&1 | tee /tmp/nginx-full.txt
python3 scan_nginx_rift.py --local --config /tmp/nginx-full.txt
# Passive remote banner check (version only)
python3 scan_nginx_rift.py --url https://your-site.example/
# JSON for automation
python3 scan_nginx_rift.py --local --json --fail-on high
当风险为 HIGH 或 CRITICAL 时,退出代码为 1(使用 --fail-on 调节 CI 门禁)。
升级到 NGINX 1.30.1 / 1.31.0+ 或操作系统/厂商的安全更新包。
升级后重启 worker(systemctl restart nginx),而不仅仅是 reload。
审计完整配置:sudo nginx -T,并搜索包含 $1/$2 和 ? 的 rewrite 规则。
临时缓解:使用命名捕获代替 $1、$2:
# Vulnerable pattern (simplified)
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_path $1;
# Safer pattern
rewrite ^/api/(?<path>.*)$ /internal?migrated=true;
set $original_path $path;
确认 Linux 上的 ASLR 保持启用(randomize_va_space=2)。
审查 Kubernetes ingress、Helm charts 和生成的配置——而不仅仅是 /etc/nginx/nginx.conf。
仅限在你有权评估的基础设施上使用。未经授权的扫描可能违反政策或法律。
| 版本 | 本地 nginx -v 或被动 Server 头 |
| 配置触发器 | 对 nginx -T 或配置文件的启发式解析 |
| ASLR (Linux) | /proc/sys/kernel/randomize_va_space |
| 指导 | 按优先级排列的修复步骤 |
| 风险 | 含义 |
|---|
| CRITICAL | 易受攻击的版本 + 与已知触发器匹配的 rewrite 模式 |
| HIGH | 易受攻击的版本且存在可疑的 rewrite,或版本未知但可能存在触发器 |
| MEDIUM | 易受攻击的版本,扫描的配置中未发现触发器(仍需修补) |
| LOW | 已修补的版本但仍存在危险的 rewrite 模式 |
| INFO | 已修补且扫描的配置中无触发器模式 |