tal7aouy/nginx-cve-2026-42945
GitHub: tal7aouy/nginx-cve-2026-42945
这是一个用于扫描NGINX CVE-2026-42945漏洞的只读防御工具,帮助组织在漏洞被利用前进行检测和加固。
Stars: 0 | Forks: 0
# CVE-2026-42945 (NGINX Rift) — 防御性扫描器
运行**NGINX Open Source**、**NGINX Plus**或基于NGINX的入口/控制器的组织,应确认是否受到 [CVE-2026-42945](https://nvd.nist.gov/vuln/detail/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 (严重) |
漏洞利用需要**特定的重写配置**:
1. 一个使用**未命名** PCRE 捕获组 (`$1`, `$2`, …) 作为替换部分的 `rewrite` 指令
2. 替换字符串包含 **`?`**
3. 在**同一** `server`/`location` 作用域内,另一个 `rewrite`、`if` 或 `set` 使用了该捕获组
影响:
- **拒绝服务**(工作进程崩溃)是最现实的结果,并且已在野外被利用。
- **远程代码执行** 较为困难,通常需要主机**禁用 ASLR**。
## 扫描器功能
| 检查项 | 方法 |
|--------|------|
| 版本 | 本地 `nginx -v` 或被动 `Server` 头信息 |
| 配置触发器 | 对 `nginx -T` 或配置文件进行启发式解析 |
| ASLR (Linux) | `/proc/sys/kernel/randomize_va_space` |
| 指导 | 优先排序的修复步骤 |
它**不会**发送精心构造的漏洞利用请求或尝试使工作进程崩溃。
## 快速开始
```
cd nginx-cve-2026-42945
chmod +x scan_nginx_rift.py
# 最佳方法:在每个 NGINX 主机上使用 sudo 运行
sudo python3 scan_nginx_rift.py --local
# 或者扫描完整的 config dump
sudo nginx -T 2>&1 | tee /tmp/nginx-full.txt
python3 scan_nginx_rift.py --local --config /tmp/nginx-full.txt
# 被动远程 banner 检查(仅版本)
python3 scan_nginx_rift.py --url https://your-site.example/
# JSON 用于自动化
python3 scan_nginx_rift.py --local --json --fail-on high
```
当风险为**高**或**严重**时,退出代码为 `1`(使用 `--fail-on` 调整 CI 门禁)。
## 结果解读
| 风险 | 含义 |
|------|------|
| **严重** | 存在漏洞的版本 + 匹配已知触发条件的重写模式 |
| **高** | 存在漏洞的版本且有可疑重写,或版本未知但很可能触发 |
| **中** | 存在漏洞的版本,在已扫描配置中未发现触发器(仍需修补) |
| **低** | 已修补的版本,但仍存在有风险的重写模式 |
| **信息** | 已修补且在已扫描配置中无触发模式 |
## 修复方案 (概要)
1. **升级** 到 NGINX 1.30.1 / 1.31.0+ 或您的操作系统/供应商安全包。
2. 升级后**重启**工作进程 (`systemctl restart nginx`),而不仅仅是 `reload`。
3. **审计**完整配置:`sudo nginx -T` 并搜索包含 `$1`/`$2` 和 `?` 的重写规则。
4. **临时缓解**:使用**命名捕获组**代替 `$1`, `$2`:
# 存在漏洞的模式 (简化)
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_path $1;
# 更安全的模式
rewrite ^/api/(?.*)$ /internal?migrated=true;
set $original_path $path;
5. 确认 Linux 上的 **ASLR** 保持启用状态 (`randomize_va_space=2`)。
6. 检查 **Kubernetes ingress**、Helm charts 和生成的配置 — 不仅仅是 `/etc/nginx/nginx.conf`。
## 参考资料
- [NGINX 安全公告](https://nginx.org/en/security_advisories.html)
- [NVD — CVE-2026-42945](https://nvd.nist.gov/vuln/detail/CVE-2026-42945)
- [depthfirst — NGINX Rift](https://depthfirst.com/nginx-rift)
- F5 安全通告:K000161019
## 法律声明
仅可用于您有权评估的基础设施。未经授权的扫描可能违反政策或法律。
标签:ASLR检查, CVE-2026-42945, NGINX, URL发现, Web安全, Web服务器安全, 堆缓冲区溢出, 安全检测, 版本检测, 网络安全, 蓝队分析, 逆向工具, 防御性扫描, 隐私保护