
Un script Python qui vérifie si un serveur web est vulnérable à MadeYouReset (CVE-2025-8671) — une attaque DoS HTTP/2 qui contourne les mitigations de Rapid Reset en trompant le serveur pour qu'il réinitialise ses propres flux. Il sonde la cible en envoyant une trame WINDOW_UPDATE malformée et inspecte si le serveur répond.
Un script Python léger pour détecter si un serveur web est potentiellement vulnérable à la vulnérabilité de déni de service HTTP/2 MadeYouReset — suivie sous la référence CVE-2025-8671 (CVSS 7.5 High).
MadeYouReset est une vulnérabilité DoS HTTP/2 divulguée en août 2025 par des chercheurs de l’Université de Tel Aviv et d’Imperva. Elle exploite un décalage entre la comptabilisation des flux HTTP/2 et le traitement interne du backend dans de nombreuses implémentations de serveurs populaires.
L’attaque envoie des trames de contrôle HTTP/2 délibérément mal formées (par exemple un WINDOW_UPDATE avec increment=0, ce qui est illégal selon RFC 9113 §6.9.1) pour forcer le serveur lui-même à émettre des trames RST_STREAM. Comme le serveur considère le flux comme fermé au niveau protocole tout en continuant de traiter la requête dans le backend, un attaquant peut contourner la limite MAX_CONCURRENT_STREAMS et épuiser les ressources du serveur — sans envoyer un seul RST_STREAM côté client.
Cela en fait un contournement des atténuations introduites pour l’attaque (CVE-2023-44487).
Logiciels connus affectés :
| Produit | CVE |
|---|---|
| Apache Tomcat 9.x / 10.x / 11.x | CVE-2025-48989 |
| Netty < 4.1.124.Final / 4.2.4.Final | CVE-2025-55163 |
| F5 BIG-IP | CVE-2025-54500 |
| IBM WebSphere Application Server Liberty | CVE-2025-36047 |
| Varnish, Fastly, Jetty, SUSE, Wind River | CVE-2025-8671 |
h2 via ALPN.SETTINGS.HEADERS.WINDOW_UPDATE mal formée (increment=0) sur le flux ouvert.RST_STREAM sur le flux (pas de GOAWAY) → probablement vulnérable.GOAWAY → comportement RFC correct ; probablement corrigé.Le script effectue un sondage passif en lecture seule — il ne tente pas d’exploiter ou de stresser le serveur.
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# No pip install needed — no dependencies
python3 main.py <url> [OPTIONS]
| Flag | Défaut | Description |
|---|---|---|
--timeout SECONDS | 8 | Délai d’attente de lecture de socket |
--no-color | off | Désactiver la sortie couleur ANSI |
# Basic check
python3 main.py https://example.com
# Custom port and longer timeout
python3 main.py https://example.com:8443 --timeout 15
# CI-friendly (no colour)
python3 main.py https://example.com --no-color
| Code | Signification |
|---|---|
0 | Non vulnérable — le serveur a répondu avec GOAWAY (comportement RFC correct) |
1 | Probablement vulnérable — le serveur a envoyé RST_STREAM sur le flux mais pas de GOAWAY |
2 | Non concluant — pas de HTTP/2, erreur de connexion ou réponse ambiguë |
Les codes de sortie facilitent l’intégration dans des pipelines CI ou des scripts d’automatisation.
========================================================
MadeYouReset (CVE-2025-8671) Vérificateur
========================================================
Cible : https://vulnerable-server.example.com
Hôte : vulnerable-server.example.com:443
Chemin : /
Délai d’attente : 8.0s
────────────────────────────────────────────────────────
[*] Connexion à vulnerable-server.example.com:443 ...
✓ Connexion TCP établie
[*] Exécution de la poignée de main TLS (ALPN: h2, http/1.1) ...
→ Protocole négocié : h2
✓ HTTP/2 (h2) négocié via ALPN
[*] Envoi du préambule client HTTP/2 ...
✓ Préambule + SETTINGS envoyés
[*] Attente des SETTINGS du serveur ...
← Frame type=0x04 stream=0 length=18
✓ SETTINGS du serveur reçus
✓ SETTINGS ACK envoyé
[*] Ouverture du flux HTTP/2 1 (trame HEADERS) ...
✓ HEADERS envoyé sur le flux 1
[*] Envoi d’un WINDOW_UPDATE malformé (increment=0) sur le flux 1 ...
RFC 9113 §6.9.1 : increment=0 est une erreur de contrôle de flux au niveau du flux (FLOW_CONTROL_ERROR)
✓ WINDOW_UPDATE malformé envoyé
[*] Analyse de la réponse du serveur (délai=8.0s) ...
← RST_STREAM stream=1 error_code=0x00000003
────────────────────────────────────────────────────────
RÉSULTAT
────────────────────────────────────────────────────────
[PROBABLEMENT VULNÉRABLE]
Le serveur a répondu avec RST_STREAM sur le flux 1
(error_code=0x00000003) mais n’a PAS envoyé GOAWAY.
Actions recommandées :
• Correctif : Apache Tomcat ≥10.1.44/11.0.10/9.0.108,
Netty ≥4.1.124.Final / 4.2.4.Final,
et autres avis des fournisseurs pour CVE-2025-8671.
• Solution temporaire : désactiver HTTP/2 ou déployer un WAF/proxy qui
valide les trames HTTP/2 avant de les transmettre.
========================================================
| Action | Détails |
|---|---|
| Correctif | Appliquer la dernière mise à jour du fournisseur pour votre pile HTTP/2 (voir tableau ci-dessus) |
| Désactiver HTTP/2 | Revenir à HTTP/1.1 comme atténuation temporaire |
| WAF / Proxy | Déployer un proxy inverse ou un WAF qui valide les trames HTTP/2 en périphérie |
| Limitation de débit | Imposer des limites de connexion par client et des limites de débit RST_STREAM |
Cet outil est destiné uniquement aux tests de sécurité et à la recherche autorisés.
N’exécutez pas ce script contre des systèmes que vous ne possédez pas ou pour lesquels vous n’avez pas d’autorisation écrite explicite.
Les auteurs déclinent toute responsabilité en cas d’utilisation abusive.