renzi25031469/CVE-2026-4253-Scanner
GitHub: renzi25031469/CVE-2026-4253-Scanner
该工具是一款针对 NGINX HTTP/3 use-after-free 漏洞(CVE-2026-42530)的非破坏性批量安全扫描器,通过安全的版本指纹检测帮助企业在不触发漏洞的前提下盘点资产风险。
Stars: 0 | Forks: 0
CVE-2026-42530 — 安全检查扫描器
针对 NGINX HTTP/3 (QUIC) use-after-free 的非破坏性批量扫描器
盘点哪些主机存在风险——且绝不触发该漏洞。
## ⚠️ 免责声明
本工具仅供**授权的安全测试**使用——即您自己的基础设施,或您拥有明确书面授权进行评估的系统。它仅执行**只读指纹识别**,并**不会**利用漏洞。您需对保持在授权范围内、遵守适用法律及负责任的漏洞披露原则负责。作者不对滥用行为承担任何责任。
## 🔍 关于该漏洞
**CVE-2026-42530** 是存在于 NGINX 的 `ngx_http_v3_module` 中的一个 use-after-free 漏洞 (CWE-416)。当 NGINX 配置为支持 HTTP/3 时,远程未经身份验证的攻击者可以在精心构造的 HTTP/3 会话中重新打开 QPACK 编码器流,导致 worker 进程引用已释放的内存。直接后果是 worker 进程崩溃 / 重启(拒绝服务);在禁用或可绕过 ASLR 的主机上,可能会升级为远程代码执行。
| | |
|---|---|
| **CVE** | CVE-2026-42530 |
| **组件** | `ngx_http_v3_module` (HTTP/3 / QUIC) |
| **类型** | Use-After-Free (CWE-416) |
| **CVSS** | 9.2 (v4) · 8.1 (v3.1) |
| **影响** | Worker 崩溃 / DoS,未启用 ASLR 时可能发生 RCE |
| **攻击途径** | 网络,未经身份验证,无需用户交互 |
### 受影响与已修复的版本
| 分支 | 状态 |
|---|---|
| NGINX Open Source **1.31.0 – 1.31.1** | ❌ 存在漏洞 |
| NGINX Open Source **1.31.2+** | ✅ 已修复 |
| NGINX Plus | 应用厂商安全公告 (R36 P6 / 37.0.2.1) |
## ✨ 本扫描器的功能
它会建立一个真实的 HTTP/3 连接,发送单个 `HEAD /` 请求,并读取返回的 `Server` 标头。据此对每个目标进行分类——关键是,它会将**可达但隐藏版本**的主机视为*需人工审核*,而不是误判为“安全”,因为 QUIC 可达是触发该 CVE 的前提条件。
- 🛡️ **设计安全** —— 仅进行无害探测;绝不重新打开 QPACK 流,绝不发送精心构造/恶意的会话。
- 📋 **批量扫描** —— 支持从文件或 stdin 输入目标列表。
- ⚡ **高并发** —— 异步 (asyncio) 引擎可通过单一可调阈值处理数百个并发 QUIC 握手。
- 🎯 **可操作的分类** —— 六种明确的状态,而非简单的真/假。
- 📦 **可直接生成报告的输出** —— 彩色控制台摘要,并提供用于测试文档的 CSV / JSON 格式。
- 🚦 **CI 友好** —— 当检测到任何主机存在漏洞时,以非零状态退出。
### 状态含义
| 状态 | 含义 |
|---|---|
| `VULNERABLE` | 通过 HTTP/3 提供服务的 NGINX **1.31.0 / 1.31.1** |
| `HTTP3_VERSION_HIDDEN` | HTTP/3 可达,但 `Server` 被隐藏(`server_tokens off`)—— **需手动验证版本** |
| `LIKELY_PATCHED` | 通过 HTTP/3 提供服务的 NGINX,版本不在受影响范围内 |
| `NOT_NGINX` | HTTP/3 可达,但服务器不是 NGINX |
| `NO_HTTP3` | 无法连接到 HTTP/3 / QUIC 监听器(无法通过此途径攻击) |
| `ERROR` | 探测因其他原因失败 |
## 📦 安装说明
要求 **Python 3.11+**(使用了 `asyncio.timeout`)。
```
git clone https://github.com/renzi25031469/CVE-2026-42530-scanner.git
cd CVE-2026-42530-scanner
pip install aioquic
```
## 🚀 用法
```
# 单一 host
python3 cve-2026-42530-scanner.py example.com
# 从文件读取多个 host,100个并发,保存为 CSV
python3 cve-2026-42530-scanner.py -f targets.txt -c 100 --csv results.csv
# 从 stdin 管道传入目标并导出 JSON
cat hosts.txt | python3 cve-2026-42530-scanner.py -f - --json results.json
# 自定义 port 和 timeout
python3 cve-2026-42530-scanner.py target.internal -p 8443 -t 5
```
### 目标文件格式
每行一个主机。端口、协议方案、路径和注释会被自动处理:
```
# production edge
edge01.example.com
edge02.example.com:8443
https://api.example.com/
# staging
10.0.5.21
```
### 选项
| 标志 | 描述 | 默认值 |
|---|---|---|
| `host` | 单个目标(位置参数) | — |
| `-f, --file` | 目标列表文件(`-` = stdin) | — |
| `-p, --port` | 默认 QUIC/UDP 端口 | `443` |
| `-t, --timeout` | 单个主机超时时间(秒) | `10` |
| `-c, --concurrency` | 最大并发扫描数 | `50` |
| `--csv` | 将结果写入 CSV | — |
| `--json` | 将结果写入 JSON | — |
### 输出示例
```
[*] CVE-2026-42530 safe-check — 4 target(s), concurrency=100, timeout=10s
======================================================================
CVE-2026-42530 SAFE-CHECK RESULTS
======================================================================
[VULNERABLE ] edge01.example.com:443 (Server: nginx/1.31.1)
-> Vulnerable NGINX version over HTTP/3. Upgrade to nginx/1.31.2 or later.
[HTTP3_VERSION_HIDDEN ] api.example.com:443
-> HTTP/3 reachable but Server header is masked. Verify the NGINX version manually.
[LIKELY_PATCHED ] edge02.example.com:8443 (Server: nginx/1.31.2)
[NO_HTTP3 ] 10.0.5.21:443
----------------------------------------------------------------------
Summary: VULNERABLE=1 | HTTP3_VERSION_HIDDEN=1 | LIKELY_PATCHED=1 | NO_HTTP3=1
[!] 1 host(s) appear VULNERABLE. Mitigation: upgrade to nginx/1.31.2 or later,
or remove 'quic' from all 'listen' directives.
======================================================================
```
## 🩹 修复建议
1. **打补丁** —— 将 NGINX Open Source 升级到 **1.31.2+**(或者针对 NGINX Plus 应用 F5 的安全公告)。
2. **临时缓解措施** —— 如果无法立即打补丁,请通过从每个 `listen` 指令中移除 `quic` 参数并删除 `http3 on;` 来禁用 HTTP/3,然后重新加载 NGINX。这将彻底移除存在漏洞的代码路径。
3. **纵深防御** —— 保持启用 ASLR(`/proc/sys/kernel/randomize_va_space` = `2`)。请将此视为一种系统加固层,而**不是**打补丁的替代方案。
## ⚙️ 关于并发的说明
`aioquic` 是异步的,因此本扫描器使用 `asyncio.Semaphore` 而不是操作系统线程。对于网络 I/O 密集型工作——即数百个等待网络传输的 QUIC 握手——与线程池相比,单个事件循环能以更少的开销实现更高的扩展性,同时提供相同的“同时扫描多台主机”的效果。请使用 `-c` 调整阈值。
## 📄 许可证
基于 **MIT License** 发布。详见 [`LICENSE`](LICENSE)。
专为防御者和经过授权的红队构建。请负责任地进行扫描。🔐
标签:HTTP/3, NGINX, Python, QUIC, URL发现, 加密, 安全检测, 插件系统, 无后门, 漏洞扫描器, 计算机取证, 逆向工具