
Scanner de vulnérabilités non destructif pour NGINX HTTP/3 (ngx_http_v3_module). Il effectue UNIQUEMENT une sonde sûre : ouvre une connexion HTTP/3 (QUIC), envoie une seule requête HEAD et inspecte l'en-tête de réponse `Server`. Il ne tente JAMAIS de rouvrir un flux d'encodeur QPACK ni de déclencher l'use-after-free.
Scanner de masse non destructif pour la use-after-free NGINX HTTP/3 (QUIC)
Inventoriez lesquels de vos hôtes sont exposés — sans jamais déclencher le bogue.
Cet outil est réservé aux tests de sécurité autorisés — votre propre infrastructure, ou des systèmes pour lesquels vous avez une autorisation écrite explicite. Il effectue une empreinte en lecture seule et n'exploite pas la vulnérabilité. Vous êtes responsable du respect du périmètre et des lois applicables ainsi que des principes de divulgation responsable. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.
CVE-2026-42530 est une use-after-free (CWE-416) dans le module ngx_http_v3_module de NGINX. Lorsque NGINX est configuré pour servir HTTP/3, un attaquant distant non authentifié peut rouvrir un flux de codage QPACK dans une session HTTP/3 contrefaite, provoquant la référence à une mémoire libérée par un processus worker. L'impact immédiat est un crash/redémarrage du worker (déni de service) ; sur les hôtes où ASLR est désactivé ou peut être contourné, cela peut dégénérer en exécution de code à distance.
Point clé : la faille n'est accessible que lorsque HTTP/3 (QUIC) est activé — elle n'est pas activée par défaut. Les hôtes ne servant que HTTP/1.1 ou HTTP/2 via TCP ne sont pas affectés par ce vecteur spécifique.
| Branche | Statut |
|---|---|
| NGINX Open Source 1.31.0 – 1.31.1 | ❌ Vulnérable |
| NGINX Open Source 1.31.2+ | ✅ Corrigé |
| NGINX Plus | Appliquer l'avis du fournisseur (R36 P6 / 37.0.2.1) |
Il ouvre une véritable connexion HTTP/3, envoie une seule requête HEAD / et lit l'en-tête Server en retour. À partir de cela, il classifie chaque cible — et surtout, il traite les hôtes accessibles mais masquant leur version comme nécessitant une vérification manuelle plutôt que comme un faux "propre", car la présence de QUIC est la condition préalable au CVE.
Nécessite Python 3.11+ (utilise asyncio.timeout).
git clone https://github.com/renzi25031469/CVE-2026-42530-scanner.git
cd CVE-2026-42530-scanner
pip install aioquic
Astuce : utilisez un environnement virtuel —
python3 -m venv .venv && source .venv/bin/activate.
# Hôte unique
python3 cve-2026-42530-scanner.py example.com
# Plusieurs hôtes depuis un fichier, 100 en parallèle, sauvegarder un CSV
python3 cve-2026-42530-scanner.py -f targets.txt -c 100 --csv results.csv
# Cibler depuis stdin et exporter en JSON
cat hosts.txt | python3 cve-2026-42530-scanner.py -f - --json results.json
# Port et délai d'attente personnalisés
python3 cve-2026-42530-scanner.py target.internal -p 8443 -t 5
Un hôte par ligne. Les ports, schémas, chemins et commentaires sont gérés automatiquement :
# 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 de chaque directive listen et en retirant http3 on;, puis rechargez NGINX. Cela supprime complètement le chemin de code vulnérable./proc/sys/kernel/randomize_va_space = 2). Considérez ceci comme une couche de durcissement, pas un substitut à la correction.aioquic est asynchrone, donc ce scanner utilise un asyncio.Semaphore plutôt que des threads OS. Pour un travail lié aux entrées/sorties réseau — des centaines de négociations QUIC en attente sur le fil — une seule boucle d'événements évolue mieux avec beaucoup moins de surcharge qu'un pool de threads, tout en offrant le même comportement de « scan de plusieurs hôtes à la fois ». Ajustez la limite avec -c.
Merci aux chercheurs crédités dans la divulgation originale pour leur signalement coordonné.
Publié sous licence MIT. Voir LICENSE.
Conçu pour les défenseurs et les équipes rouges autorisées. Scannez de manière responsable. 🔐
| CVE | CVE-2026-42530 |
| Composant | ngx_http_v3_module (HTTP/3 / QUIC) |
| Classe | Use-After-Free (CWE-416) |
| CVSS | 9.2 (v4) · 8.1 (v3.1) |
| Impact | Crash worker / DoS, possible RCE sans ASLR |
| Vecteur | Réseau, non authentifié, aucune interaction utilisateur |
| Statut | Signification |
|---|
VULNERABLE | NGINX 1.31.0 / 1.31.1 servi via HTTP/3 |
HTTP3_VERSION_HIDDEN | HTTP/3 accessible mais Server masqué (server_tokens off) — vérifier la version manuellement |
LIKELY_PATCHED | NGINX via HTTP/3, version hors de la plage affectée |
NOT_NGINX | HTTP/3 accessible, mais le serveur n'est pas NGINX |
NO_HTTP3 | Aucun écouteur HTTP/3 / QUIC accessible (non exposé via ce vecteur) |
ERROR | La sonde a échoué pour une autre raison |
| Option | Description | Défaut |
|---|
host | Cible unique (positionnel) | — |
-f, --file | Fichier de liste de cibles (- = stdin) | — |
-p, --port | Port QUIC/UDP par défaut | 443 |
-t, --timeout | Délai d'attente par hôte (secondes) | 10 |
-c, --concurrency | Nombre maximum de scans simultanés | 50 |
--csv | Écrire les résultats en CSV | — |
--json | Écrire les résultats en JSON | — |