chenqin231/CVE-2026-42945
GitHub: chenqin231/CVE-2026-42945
针对 CVE-2026-42945(Nginx Rift)的本地风险评估脚本,通过逐层检查版本、触发配置、ASLR 状态和编译加固情况,给出贴合实际环境的风险等级判断。
Stars: 1 | Forks: 0
# CVE-2026-42945 实际风险评估脚本
针对 **CVE-2026-42945**(Nginx Rift)的本地风险评估工具。不同于直接告诉你"版本受影响就危险",这个脚本会逐层检查真正决定风险的三个条件,给出符合你实际情况的结论。
## 背景
CVE-2026-42945 是 nginx `ngx_http_rewrite_module` 中一个存在了 18 年的堆缓冲区溢出漏洞(CWE-122),CVSS 4.0 评分 9.2。但公告中有一句关键的限定:
RCE 成立需要同时满足三个条件:
1. nginx 配置了特定的 `rewrite` + `set` 指令组合
2. 系统关闭了 ASLR(现代 Linux 默认开启)
3. nginx 堆地址字节恰好全部是 URI 安全字符
缺少任何一个,最坏结果是 worker 进程崩溃后自动重启(DoS),而非服务器被接管。
详细分析见:[《nginx 藏了 18 年的炸弹,9.2 分漏洞到底炸没炸你的服务器?》](https://mp.weixin.qq.com/s?__biz=MzA4NjYxMDgzMw==&tempkey=MTM3NF9JYzlIQUxWYjhwa3IwMUFNdzFNM3ZCQ2dKdkwwcldzVFVmWWZwRDJKVzR4eWlvMzI5MjNxZzBsTGhhdFhPcWs0Ul9Ib05zUkpzNEdrdnRlWFlVTVI4Y2w4czltaERnZXNwclQwRk0yWFkwYWxMUE8xSjNXZ29iSUZoYzRHYXJkempteEdya3J3cGNpT3JqSnMyNHhpbHB1UDNDZUliTDRncGJwRDVnfn4%3D&chksm=07c09dfc30b714ea6536a39b51f84621c17e31631f0ea44922171b5a656428346b16bb999383&poc_token=HNaRBmqjMipAZQioknTeTvv3ocLu5PlpjzPuE7cz)
## 快速使用
# 运行(需要 sudo 读取 nginx 完整配置)
sudo bash check_cve_2026_42945.sh
## 检测项目
脚本依次检查以下四项,任意一项不满足即提前退出并给出结论:
| 检测项 | 说明 |
|--------|------|
| nginx 版本 | 受影响范围:0.6.27 – 1.30.0 |
| 漏洞触发配置 | 同一 `location` 块内同时存在含 `?` 的 `rewrite` 和捕获组 `set` |
| ASLR 状态 | 读取 `/proc/sys/kernel/randomize_va_space` |
| 编译加固 | 检测 `-fcf-protection` / `FORTIFY_SOURCE` / Full RELRO / 栈保护 |
## 输出示例
**情况一:版本受影响,但无漏洞触发配置(最常见)**
[*] nginx 版本:1.24.0
[!] 版本 1.24.0 在受影响范围内,继续检查触发条件...
[*] 扫描 nginx 配置(检查 rewrite+set 漏洞配置组合)...
[✓] 未发现漏洞触发配置(rewrite+set 组合)
结论:版本受影响,但无漏洞触发配置,实际风险极低
建议:规划升级到 1.30.1 / 1.31.0,无需紧急处理
**情况二:有漏洞配置,ASLR 开启,编译加固完善**
[!] 版本 1.24.0 在受影响范围内,继续检查触发条件...
[!] 发现漏洞触发配置:
→ location ~ ^/api/(.*)$ {
[✓] ASLR 已启用(级别 2,完整随机化)
→ RCE 可靠利用所需前提不满足,最坏情况为 worker 进程崩溃(DoS)
[✓] 检测到 -fcf-protection(Intel CET 控制流保护)
[✓] 检测到 FORTIFY_SOURCE=3
[✓] 检测到 Full RELRO(GOT 只读)
[✓] 检测到栈保护(stack-protector)
风险等级:低
建议:在下次维护窗口升级到 nginx 1.30.1 / 1.31.0
**情况三:有漏洞配置,ASLR 关闭**
[!] 发现漏洞触发配置:
→ location ~ ^/api/(.*)$ {
[✗] ASLR 已关闭!RCE 风险显著上升
风险等级:高(DoS 确定 / RCE 可能)
立即行动:
1. 临时移除或修改触发漏洞的 rewrite+set 配置
2. 确认 ASLR 开启:echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
3. 升级 nginx:apt install nginx 或 编译安装 1.30.1+
## 风险等级说明
| 等级 | 含义 | 建议处理节奏 |
|------|------|-------------|
| 无影响 | 未安装 nginx 或版本已修复 | 无需操作 |
| 极低 | 版本受影响但无触发配置 | 下次例行维护时升级 |
| 低 | 有触发配置,但 ASLR + 编译加固完善 | 下次维护窗口升级 |
| 中 | 有触发配置,防护存在缺口 | 尽快升级,可用性有风险 |
| 高 | 有触发配置 + ASLR 关闭 + 加固缺失 | 立即处理 |
## 修复版本
| 产品 | 受影响版本 | 修复版本 |
|------|-----------|---------|
| NGINX 开源版 | 0.6.27 – 1.30.0 | **1.30.1 / 1.31.0** |
| NGINX Plus | R32 – R36 | **R36 P4 / R35 P2 / R32 P6** |
# Ubuntu / Debian
sudo apt update && sudo apt install nginx
# 验证版本
nginx -v
官方公告:[https://my.f5.com/manage/s/article/K000161019](https://nvd.nist.gov/vuln/detail/CVE-2026-42945)
## 测试覆盖
脚本在以下场景均经过实际验证:
- [x] nginx 未安装 → 直接退出
- [x] nginx 版本不在受影响范围(1.31.0)→ 不受影响
- [x] 版本受影响,无触发配置 → 极低风险
- [x] 版本受影响,有触发配置,ASLR 开启,加固完善 → 低风险
- [x] 版本受影响,有触发配置,ASLR 关闭 → 中/高风险
测试环境:Ubuntu 22.04 LTS,nginx 1.24.0 (Ubuntu 官方包)
## 局限性
- 配置检测基于正则匹配,复杂的多层 `include` 结构可能存在漏检(脚本通过 `nginx -T` 展开所有 include,覆盖绝大多数情况)
- 不检测 OpenResty / Tengine 等 nginx 衍生版本
- 仅适用于 Linux 系统
## License
MIT
标签:ASLR, Cutter, CVE, CVE-2026-42945, DoS, GitHub Advanced Security, Nginx, Nginx Rift, ngx_http_rewrite_module, RCE, XXE攻击, 堆缓冲区溢出, 安全加固, 安全脚本, 应用安全, 拒绝服务, 数字签名, 数据展示, 无线安全, 漏洞分析, 红队, 编程工具, 网络安全, 网络安全审计, 路径探测, 远程代码执行, 隐私保护