nu0l/NGINX-Rift
GitHub: nu0l/NGINX-Rift
Stars: 4 | Forks: 1
# NGINX Rift — CVE-2026-42945 / CVE-2026-9256 漏洞扫描与验证工具
.*)$ /internal?id=$myid last;
## 功能特性
- **远程扫描模式 (Scan)** — 通过 HTTP 响应头指纹识别 NGINX 版本,支持单目标和批量扫描
- **本地验证模式 (Verify)** — 三步立体审计:二进制版本检测 → 配置文件语义分析 → K8s Ingress 资源探测
- **OS 补丁回溯检测** — 联动 `dpkg`/`rpm` 包管理器,检测发行版是否已通过 Backport 修复漏洞
- **K8s 云原生支持** — 自动发现 Kubernetes Ingress 资源中的危险 `rewrite-target` 注解
- **零依赖** — 纯 Go 标准库实现,单文件编译,无第三方依赖
- **跨平台** — 支持 Windows / Linux / macOS (amd64 + arm64)
## 安装
### 方式一:下载预编译二进制
从 [Releases](../../releases) 页面下载对应平台的二进制文件。
### 方式二:源码编译
git clone https://github.com/nu0l/NGINX-Rift.git
cd NGINX-Rift
# 单平台编译
go build -o nginx_rift_scanner nginx_rift_scanner.go
# 全平台交叉编译
chmod +x build.sh && ./build.sh
## 使用方法
### 查看帮助
./nginx_rift_scanner -h
### Scan 模式 — 远程网络扫描
# 扫描单个目标
./nginx_rift_scanner scan -u http://example.com
# 批量扫描(从文件读取 URL 列表)
./nginx_rift_scanner scan -f url.txt
`url.txt` 每行一个 URL,例如:
http://target1.com
https://target2.com
target3.com
### Verify 模式 — 本地深度审计
# 自动查找默认 NGINX 配置路径
./nginx_rift_scanner verify
# 指定配置文件路径
./nginx_rift_scanner verify -p /etc/nginx/nginx.conf
Verify 模式执行三步审计:
1. **二进制版本检测** — 运行 `nginx -v` 获取版本,并检查 OS 包管理器的 Backport 补丁
2. **配置文件分析** — 递归解析 NGINX 配置(含 `include` 指令),识别危险的 rewrite 规则
3. **K8s Ingress 探测** — 若检测到 `kubectl`,自动扫描集群中所有 Ingress 资源
## 修复建议
| 优先级 | 方案 | 说明 |
|--------|------|------|
| P0 | 升级 NGINX | 升级至 1.30.2+ (stable) / 1.31.1+ (mainline) / NGINX Plus 最新安全版本 |
| P0 | OS 包管理器更新 | `apt-get upgrade nginx` 或 `yum update nginx` |
| P1 | 紧急配置缓解 | 将 rewrite 中的 `$1`、`$2` 等改为命名捕获组 `$name`,无需停机 |
| P2 | K8s Ingress 修复 | 升级 Ingress Controller 并修改 `rewrite-target` 注解 |
| P3 | 纵深防御 | 配置 `server_tokens off;` 隐藏版本指纹 |
## 项目结构
NGINX-Rift/
├── nginx_rift_scanner.go # 主程序源码
├── build.sh # 全平台交叉编译脚本
├── go.mod # Go 模块定义
└── README.md
## 技术实现
- 使用 Go 标准库 `net/http` 发送 HTTP 请求,解析 `Server` 响应头
- 正则匹配提取开源版 (`nginx/X.Y.Z`) 和商业版 (`NGINX Plus RXX`) 版本号
- 版本范围覆盖 CVE-2026-42945 (0.6.27 - 1.30.0) 和 CVE-2026-9256 (0.1.17 - 1.31.0) 的并集
- 递归解析 NGINX 配置文件,跟踪 `include` 指令,使用 `visited` map 防止循环引用
- 配置检测同时识别两种漏洞模式: `?` + `$N` (CVE-2026-42945) 和多个 `$N` 引用 (CVE-2026-9256)
- 通过 `kubectl get ingress --all-namespaces -o yaml` 动态获取 K8s Ingress 配置
- 调用 `dpkg-query`/`rpm --changelog` 检测 OS 级 Backport 补丁 (同时搜索两个 CVE 编号)
- 静态编译 (`CGO_ENABLED=0`),生成无 C 依赖的独立二进制
## 许可证
MIT License
## 致谢
由安全社区贡献。
标签:EVTX分析