
Ce script exploite la vulnérabilité CVE-2024-40094 dans graphql-java.
Ce script exploite la vulnérabilité CVE-2024-40094 dans graphql-java en déclenchant un déni de service basé sur ExecutableNormalizedFields (ENF). Il construit une requête d'introspection GraphQL spécialement conçue avec des alias profondément imbriqués, destinée à submerger le serveur vulnérable.
Le script utilise des requêtes asynchrones pour envoyer une série de grandes requêtes d'introspection à un serveur GraphQL cible. Les requêtes sont envoyées sous forme de charges utiles JSON et sont structurées pour exploiter une vulnérabilité spécifique dans la façon dont les serveurs GraphQL gèrent les requêtes d'introspection profondément imbriquées. En déclenchant un grand nombre de ces requêtes en parallèle, le script vise à provoquer une condition de déni de service sur les systèmes vulnérables.
asyncio et aiohttp pour des requêtes non bloquantes et efficaces.Cet exploit cible les serveurs exécutant une version vulnérable de graphql-java, en particulier ceux qui ne gèrent pas correctement les requêtes d'introspection profondément imbriquées.
graphql-java (versions vulnérables à CVE-2024-40094)Pour exécuter l'exploit, vous avez besoin de Python 3.7+ avec les dépendances suivantes :
aiohttp pour les requêtes HTTP asynchronesurllib3 pour la gestion SSL (désactive les avertissements concernant les certificats auto-signés)Vous pouvez installer les dépendances requises à l'aide de pip :
pip install aiohttp urllib3
Tous les paramètres clés peuvent être fournis au moment de l'exécution via les options de ligne de commande :
--url) : l'URL de l'API GraphQL cible.--header) : personnalisez le jeton d'autorisation (Authorization) et les autres en-têtes selon vos besoins. Les requêtes envoient des corps JSON, incluez donc Content-Type: application/json. L'option peut être répétée.--job-count) : le nombre de tâches (coroutines) concurrentes à lancer. La valeur par défaut est 50.--concurrency-limit) : nombre maximal de requêtes simultanées sur l'ensemble des tâches. Doit être ≥ JOB_COUNT. Par défaut, il correspond au nombre de tâches ; augmentez-le avec prudence.--alias-count) : le nombre de blocs d'alias dans la requête. Cela contrôle la profondeur et la charge de la requête.--delay) : le délai entre les requêtes en secondes. Définissez-le sur 0 pour aucun délai ou ajustez-le si nécessaire pour éviter de submerger la cible trop rapidement.--max-requests) : le nombre maximal de requêtes que chaque tâche enverra. Utilisez 0 pour des requêtes illimitées.Clonez le dépôt sur votre machine locale :
git clone https://github.com/kabiri-labs/CVE-2024-40094.git
cd CVE-2024-40094
Exécutez le script en fournissant les options souhaitées en ligne de commande :
python CVE-2024-40094.py \
--url https://api.example.com/graphql \
--header "Authorization: Bearer <token>" \
--header "Host: api.example.com" \
--job-count 50 \
--alias-count 500 \
--concurrency-limit 50
Le script commencera à envoyer des requêtes au serveur cible. Vous verrez l'état de chaque requête affiché dans la console, et les journaux seront écrits dans le fichier journal spécifié.
Exemple de sortie :
[Worker-0] Status: 200, Len: 1000, Time: 0.35s, Snippet: {"data":{"__schema":{"types":[...]}...
[Worker-1] Status: 200, Len: 1050, Time: 0.37s, Snippet: {"data":{"__schema":{"types":[...]}...
Ne pas utiliser sur des cibles non autorisées : ce script est destiné à la recherche en sécurité et aux tests dans des environnements contrôlés. Ne l'utilisez pas sur des serveurs de production ou des systèmes sans autorisation explicite.
Risque de déni de service : exécuter ce script contre un serveur vulnérable peut le rendre non réactif ou provoquer son crash. Utilisez avec précaution.
Ce script est sous licence MIT. Consultez le fichier LICENSE pour plus de détails.