
Недеструктивный сканер уязвимостей для NGINX HTTP/3 (ngx_http_v3_module). Он выполняет ТОЛЬКО безопасную проверку: открывает соединение HTTP/3 (QUIC), отправляет один HEAD-запрос и проверяет заголовок ответа `Server`. Он НИКОГДА не пытается повторно открыть поток кодировщика QPACK или вызвать use-after-free.
Неразрушающий массовый сканер для use-after-free в NGINX HTTP/3 (QUIC)
Определите, какие из ваших хостов подвержены уязвимости, — не вызывая ошибку.
Этот инструмент предназначен только для авторизованного тестирования безопасности — вашей собственной инфраструктуры или систем, на проверку которых у вас есть явное письменное разрешение. Он выполняет снятие «отпечатка» в режиме только для чтения и не эксплуатирует уязвимость. Вы несёте ответственность за соблюдение границ полномочий и соответствие действующему законодательству и принципам ответственного раскрытия. Авторы не несут ответственности за неправомерное использование.
CVE-2026-42530 — это use-after-free (CWE-416) в модуле ngx_http_v3_module NGINX. Если NGINX настроен на обслуживание HTTP/3, удалённый неаутентифицированный злоумышленник может повторно открыть поток QPACK-энкодера в специально сформированной HTTP/3-сессии, что приведёт к обращению рабочего процесса к освобождённой памяти. Немедленное последствие — сбой/перезапуск рабочего процесса (отказ в обслуживании); на хостах, где ASLR отключён или может быть обойдён, уязвимость может привести к удалённому выполнению кода.
Ключевой момент: уязвимость доступна только при включённом HTTP/3 (QUIC) — по умолчанию он не включён. Хосты, обслуживающие только HTTP/1.1 или HTTP/2 по TCP, не подвержены данному конкретному вектору.
| Ветка | Статус |
|---|---|
| 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.
Требуется 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.
# Single host
python3 cve-2026-42530-scanner.py example.com
# Many hosts from a file, 100 in parallel, save a CSV
python3 cve-2026-42530-scanner.py -f targets.txt -c 100 --csv results.csv
# Pipe targets from stdin and export JSON
cat hosts.txt | python3 cve-2026-42530-scanner.py -f - --json results.json
# Custom port and 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
[*] 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.
======================================================================
quic из каждой директивы listen и убрав http3 on;, затем перезагрузите NGINX. Это полностью устраняет уязвимый путь выполнения кода./proc/sys/kernel/randomize_va_space = 2). Относитесь к этому как к слою усиления, а не как к замене патча.aioquic является асинхронной библиотекой, поэтому сканер использует asyncio.Semaphore вместо потоков ОС. Для задач, ограниченных сетевым вводом-выводом, — сотни QUIC-рукопожатий, ожидающих в сети, — один цикл событий масштабируется лучше и с гораздо меньшими накладными расходами, чем пул потоков, сохраняя то же поведение «сканирования многих хостов одновременно». Ограничение настраивается флагом -c.
Благодарим исследователей, указанных в оригинальном раскрытии, за скоординированное сообщение об уязвимости.
Выпущено под лицензией MIT. См. LICENSE.
Создано для защитников и авторизованных красных команд. Сканируйте ответственно. 🔐
| CVE | CVE-2026-42530 |
| Компонент | ngx_http_v3_module (HTTP/3 / QUIC) |
| Класс | Use-After-Free (CWE-416) |
| CVSS | 9.2 (v4) · 8.1 (v3.1) |
| Воздействие | Сбой рабочего процесса / DoS, возможное RCE при отключённом ASLR |
| Вектор | Сетевой, без аутентификации, без взаимодействия с пользователем |
| Статус | Значение |
|---|
VULNERABLE | NGINX 1.31.0 / 1.31.1, обслуживаемый по HTTP/3 |
HTTP3_VERSION_HIDDEN | HTTP/3 доступен, но Server скрыт (server_tokens off) — проверьте версию вручную |
LIKELY_PATCHED | NGINX по HTTP/3, версия вне затронутого диапазона |
NOT_NGINX | HTTP/3 доступен, но сервер — не NGINX |
NO_HTTP3 | HTTP/3 / QUIC-слушатель недоступен (не подвержен этому вектору) |
ERROR | Сбой зондирования по другой причине |
| Флаг | Описание | По умолчанию |
|---|
host | Одна цель (позиционный аргумент) | — |
-f, --file | Файл со списком целей (- = stdin) | — |
-p, --port | Порт QUIC/UDP по умолчанию | 443 |
-t, --timeout | Таймаут на хост (секунды) | 10 |
-c, --concurrency | Максимум одновременных сканирований | 50 |
--csv | Записать результаты в CSV | — |
--json | Записать результаты в JSON | — |