针对 NGINX HTTP/3(QUIC)释放后使用漏洞的非破坏性批量扫描器
在不触发漏洞的前提下,盘点你的哪些主机存在风险。
本工具仅用于授权的安全测试——测试你自己的基础设施,或你有明确书面授权进行评估的系统。它执行只读指纹识别,并不会利用漏洞。你有责任确保测试在授权范围内,并遵守适用法律及负责任的披露原则。作者不对滥用行为承担任何责任。
CVE-2026-42530 是 NGINX 的 ngx_http_v3_module 中存在的释放后使用漏洞(CWE-416)。当 NGINX 配置为提供 HTTP/3 服务时,远程未经认证的攻击者可以在精心构造的 HTTP/3 会话中重新打开 QPACK 编码器流,导致工作进程引用已释放的内存。直接后果是工作进程崩溃/重启(拒绝服务);在 ASLR 被禁用或可绕过的环境中,该漏洞可能升级为远程代码执行。
关键点: 该缺陷仅在启用 HTTP/3(QUIC) 时才能被利用——默认情况下并未启用。仅提供 HTTP/1.1 或 HTTP/2 over TCP 的主机不受此特定向量影响。
| 分支 | 状态 |
|---|---|
| NGINX 开源版 1.31.0 – 1.31.1 | ❌ 受影响 |
| NGINX 开源版 1.31.2+ | ✅ 已修复 |
| NGINX Plus | 应用厂商公告(R36 P6 / 37.0.2.1) |
它建立真实的 HTTP/3 连接,发送一个 HEAD / 请求,并读取返回的 Server 头部。据此对每个目标进行分类——关键在于,它将可到达但隐藏版本的主机视为需要手动检查,而不是虚假的“安全”,因为 QUIC 可到达是此 CVE 的前提条件。
需要 Python 3.11+(使用了 asyncio.timeout)。
git clone https://github.com/renzi25031469/CVE-2026-42530-scanner.git
cd CVE-2026-42530-scanner
pip install aioquic
提示:建议使用虚拟环境——
python3 -m venv .venv && source .venv/bin/activate。
# 单主机
python3 cve-2026-42530-scanner.py example.com
# 从文件读取多个主机,并发100,保存CSV
python3 cve-2026-42530-scanner.py -f targets.txt -c 100 --csv results.csv
# 从标准输入管道传入目标,导出JSON
cat hosts.txt | python3 cve-2026-42530-scanner.py -f - --json results.json
# 自定义端口和超时
python3 cve-2026-42530-scanner.py target.internal -p 8443 -t 5
每行一个主机。端口、协议、路径和注释会被自动处理:
# 生产环境边缘节点
edge01.example.com
edge02.example.com:8443
https://api.example.com/
# 暂存环境
10.0.5.21
[*] CVE-2026-42530 安全检查 — 4 个目标,并发数=100,超时=10秒
======================================================================
CVE-2026-42530 安全检查结果
======================================================================
[VULNERABLE ] edge01.example.com:443 (Server: nginx/1.31.1)
-> 通过 HTTP/3 存在漏洞的 NGINX 版本。请升级至 nginx/1.31.2 或更高版本。
[HTTP3_VERSION_HIDDEN ] api.example.com:443
-> HTTP/3 可到达,但 Server 头被隐藏。请手动验证 NGINX 版本。
[LIKELY_PATCHED ] edge02.example.com:8443 (Server: nginx/1.31.2)
[NO_HTTP3 ] 10.0.5.21:443
----------------------------------------------------------------------
摘要:VULNERABLE=1 | HTTP3_VERSION_HIDDEN=1 | LIKELY_PATCHED=1 | NO_HTTP3=1
[!] 有 1 台主机显示为 VULNERABLE。缓解措施:升级至 nginx/1.31.2 或更高版本,
或从所有 'listen' 指令中移除 'quic'。
======================================================================
listen 指令中移除 quic 参数并删除 http3 on; 来禁用 HTTP/3,然后重新加载 NGINX。这将完全移除易受攻击的代码路径。/proc/sys/kernel/randomize_va_space = 2)。将此视为加固层,不能替代打补丁。aioquic 是异步的,因此此扫描器使用 asyncio.Semaphore 而非 OS 线程。对于网络 I/O 密集型工作——数百个 QUIC 握手在线上等待——单个事件循环比线程池开销更低且扩展性更好,同时提供相同的“一次扫描多台主机”行为。使用 -c 调整并发上限。
感谢原始披露中提及的研究人员的协调报告。
以 MIT License 发布。参见 LICENSE。
为防御者和授权红队而构建。负责任地扫描。🔐
| CVE | CVE-2026-42530 |
| 组件 | ngx_http_v3_module(HTTP/3 / QUIC) |
| 缺陷类型 | 释放后使用(CWE-416) |
| CVSS 评分 | 9.2(v4)· 8.1(v3.1) |
| 影响 | 工作进程崩溃/DoS,可能绕过 ASLR 实现 RCE |
| 攻击向量 | 网络,无需认证,无需用户交互 |
| 状态 | 含义 |
|---|
VULNERABLE | NGINX 1.31.0 / 1.31.1 通过 HTTP/3 提供服务 |
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 | 因其他原因探测失败 |
| 标志 | 描述 | 默认值 |
|---|
host | 单个目标(位置参数) | — |
-f, --file | 目标列表文件(- 表示标准输入) | — |
-p, --port | 默认 QUIC/UDP 端口 | 443 |
-t, --timeout | 每主机超时时间(秒) | 10 |
-c, --concurrency | 最大并发扫描数 | 50 |
--csv | 将结果写入 CSV 文件 | — |
--json | 将结果写入 JSON 文件 | — |