针对 CVE-2026-42945(Nginx Rift)的本地风险评估工具。不同于直接告诉你"版本受影响就危险",这个脚本会逐层检查真正决定风险的三个条件,给出符合你实际情况的结论。
CVE-2026-42945 是 nginx ngx_http_rewrite_module 中一个存在了 18 年的堆缓冲区溢出漏洞(CWE-122),CVSS 4.0 评分 9.2。但公告中有一句关键的限定:
"Code execution possible on systems without ASLR protection"
RCE 成立需要同时满足三个条件:
rewrite + set 指令组合缺少任何一个,最坏结果是 worker 进程崩溃后自动重启(DoS),而非服务器被接管。
详细分析见:《nginx 藏了 18 年的炸弹,9.2 分漏洞到底炸没炸你的服务器?》
# 运行(需要 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
脚本在以下场景均经过实际验证:
测试环境:Ubuntu 22.04 LTS,nginx 1.24.0 (Ubuntu 官方包)
include 结构可能存在漏检(脚本通过 nginx -T 展开所有 include,覆盖绝大多数情况)MIT