
Scanner de vulnerabilidades não destrutivo para NGINX HTTP/3 (ngx_http_v3_module). Ele SOMENTE realiza uma sondagem segura: abre uma conexão HTTP/3 (QUIC), envia uma única requisição HEAD e inspeciona o cabeçalho `Server` da resposta. Ele NUNCA tenta reabrir um stream do codificador QPACK nem acionar o use-after-free.
Scanner em massa não destrutivo para o use-after-free do NGINX HTTP/3 (QUIC)
Inventarie quais dos seus hosts estão expostos — sem nunca acionar a falha.
Esta ferramenta destina-se somente a testes de segurança autorizados — na sua própria infraestrutura ou em sistemas para os quais você tenha permissão explícita por escrito para avaliar. Ela realiza uma impressão digital somente leitura e não explora a vulnerabilidade. Você é responsável por permanecer dentro do escopo e por cumprir a legislação aplicável e os princípios de divulgação responsável. Os autores não aceitam qualquer responsabilidade por uso indevido.
CVE-2026-42530 é um use-after-free (CWE-416) no ngx_http_v3_module do NGINX. Quando o NGINX está configurado para servir HTTP/3, um atacante remoto não autenticado pode reabrir um fluxo de codificador QPACK dentro de uma sessão HTTP/3 maliciosa, fazendo com que um processo worker referencie memória já liberada. O impacto imediato é a queda/reinício do worker (negação de serviço); em hosts onde o ASLR está desativado ou pode ser contornado, pode escalar para execução remota de código.
Ponto-chave: a falha só é alcançável quando HTTP/3 (QUIC) está habilitado — ela não vem ativada por padrão. Hosts que servem apenas HTTP/1.1 ou HTTP/2 sobre TCP não são afetados por este vetor específico.
| Ramo | Status |
|---|---|
| NGINX Open Source 1.31.0 – 1.31.1 | ❌ Vulnerável |
| NGINX Open Source 1.31.2+ | ✅ Corrigido |
| NGINX Plus | Aplicar o aviso do fornecedor (R36 P6 / 37.0.2.1) |
Ele abre uma conexão HTTP/3 real, envia uma única solicitação HEAD / e lê o cabeçalho Server na resposta. A partir disso, classifica cada alvo — e, crucialmente, trata hosts alcançáveis, porém com versão oculta como exigem revisão manual, em vez de um falso "limpo", pois o QUIC acessível é a pré-condição para a CVE.
Requer Python 3.11+ (usa asyncio.timeout).
git clone https://github.com/renzi25031469/CVE-2026-42530-scanner.git
cd CVE-2026-42530-scanner
pip install aioquic
Dica: use um ambiente virtual —
python3 -m venv .venv && source .venv/bin/activate.
# Host único
python3 cve-2026-42530-scanner.py example.com
# Muitos hosts a partir de um arquivo, 100 em paralelo, salvar um CSV
python3 cve-2026-42530-scanner.py -f targets.txt -c 100 --csv results.csv
# Enviar alvos pelo stdin e exportar JSON
cat hosts.txt | python3 cve-2026-42530-scanner.py -f - --json results.json
# Porta e tempo limite personalizados
python3 cve-2026-42530-scanner.py target.internal -p 8443 -t 5
Um host por linha. Portas, esquemas, caminhos e comentários são tratados automaticamente:
# produção edge
edge01.example.com
edge02.example.com:8443
https://api.example.com/
# staging
10.0.5.21
[*] CVE-2026-42530 safe-check — 4 alvo(s), concorrência=100, tempo limite=10s
======================================================================
RESULTADOS DO SAFE-CHECK CVE-2026-42530
======================================================================
[VULNERABLE ] edge01.example.com:443 (Server: nginx/1.31.1)
-> Versão NGINX vulnerável via HTTP/3. Atualize para nginx/1.31.2 ou posterior.
[HTTP3_VERSION_HIDDEN ] api.example.com:443
-> HTTP/3 acessível, mas o cabeçalho Server está mascarado. Verifique a versão do NGINX manualmente.
[LIKELY_PATCHED ] edge02.example.com:8443 (Server: nginx/1.31.2)
[NO_HTTP3 ] 10.0.5.21:443
----------------------------------------------------------------------
Resumo: VULNERABLE=1 | HTTP3_VERSION_HIDDEN=1 | LIKELY_PATCHED=1 | NO_HTTP3=1
[!] 1 host(s) parece(m) VULNERABLE. Mitigação: atualize para nginx/1.31.2 ou posterior,
ou remova 'quic' de todas as diretivas 'listen'.
======================================================================
quic de todas as diretivas listen e removendo http3 on;, depois recarregue o NGINX. Isso elimina completamente o caminho de código vulnerável./proc/sys/kernel/randomize_va_space = 2). Trate isso como uma camada de endurecimento, não como substituto da correção.O aioquic é assíncrono, portanto este scanner usa um asyncio.Semaphore em vez de threads do sistema operacional. Para trabalho limitado por I/O de rede — centenas de handshakes QUIC aguardando na rede — um único loop de eventos escala ainda mais com muito menos sobrecarga do que um pool de threads, oferecendo ao mesmo tempo o comportamento de "escanear muitos hosts de uma vez". Ajuste o limite com -c.
Agradecemos aos pesquisadores creditados na divulgação original pela sua coordenação responsável.
Publicado sob a Licença MIT. Consulte LICENSE.
Construído para defensores e equipes vermelhas autorizadas. Escaneie com responsabilidade. 🔐
| CVE | CVE-2026-42530 |
| Componente | ngx_http_v3_module (HTTP/3 / QUIC) |
| Classe | Use-After-Free (CWE-416) |
| CVSS | 9.2 (v4) · 8.1 (v3.1) |
| Impacto | Queda do worker / DoS, possível RCE sem ASLR |
| Vetor | Rede, não autenticado, sem interação do usuário |
| Status | Significado |
|---|
VULNERABLE | NGINX 1.31.0 / 1.31.1 servido via HTTP/3 |
HTTP3_VERSION_HIDDEN | HTTP/3 acessível, mas Server está mascarado (server_tokens off) — verifique a versão manualmente |
LIKELY_PATCHED | NGINX via HTTP/3, versão fora da faixa afetada |
NOT_NGINX | HTTP/3 acessível, mas o servidor não é NGINX |
NO_HTTP3 | Nenhum listener HTTP/3 / QUIC acessível (não exposto por este vetor) |
ERROR | A sonda falhou por outro motivo |
| Flag | Descrição | Padrão |
|---|
host | Alvo único (posicional) | — |
-f, --file | Arquivo com a lista de alvos (- = stdin) | — |
-p, --port | Porta QUIC/UDP padrão | 443 |
-t, --timeout | Tempo limite por host (segundos) | 10 |
-c, --concurrency | Máximo de varreduras simultâneas | 50 |
--csv | Gravar resultados em CSV | — |
--json | Gravar resultados em JSON | — |