
Dieses Skript nutzt die Sicherheitslücke CVE-2024-40094 in graphql-java aus.
Dieses Skript nutzt die Schwachstelle CVE-2024-40094 in graphql-java aus, indem es einen ExecutableNormalizedFields (ENF)-basierten Denial-of-Service auslöst. Es erstellt eine manipulierte GraphQL-Introspection-Abfrage mit tief verschachtelten Aliassen, die darauf ausgelegt ist, den anfälligen Server zu überlasten.
Das Skript verwendet asynchrone Anfragen, um eine Reihe großer Introspection-Abfragen an einen Ziel-GraphQL-Server zu senden. Die Abfragen werden als JSON-Payloads gesendet und sind so strukturiert, dass sie eine spezifische Schwachstelle darin ausnutzen, wie GraphQL-Server tief verschachtelte Introspection-Abfragen verarbeiten. Durch die parallele Auslösung einer großen Anzahl solcher Abfragen zielt das Skript darauf ab, eine Denial-of-Service-Bedingung in verwundbaren Systemen zu verursachen.
asyncio und aiohttp für effiziente, nicht blockierende Anfragen.Dieser Exploit zielt auf Server ab, die eine verwundbare Version von graphql-java ausführen, insbesondere solche, die tief verschachtelte Introspection-Abfragen nicht ordnungsgemäß verarbeiten.
graphql-java-Server (Versionen, die für CVE-2024-40094 anfällig sind)Um den Exploit auszuführen, benötigen Sie Python 3.7+ mit den folgenden Abhängigkeiten:
aiohttp für asynchrone HTTP-Anfragenurllib3 für SSL-Handling (deaktiviert Warnungen zu selbstsignierten Zertifikaten)Sie können die erforderlichen Abhängigkeiten mit pip installieren:
pip install aiohttp urllib3
Alle wichtigen Parameter können zur Laufzeit über Befehlszeilenoptionen angegeben werden:
--url): Die Ziel-GraphQL-API-URL.--header): Passen Sie das Authorization-Token und andere Header nach Bedarf an. Anfragen senden JSON-Bodies, also fügen Sie Content-Type: application/json hinzu. Die Option kann wiederholt werden.--job-count): Die Anzahl der gleichzeitigen Jobs (Coroutinen), die gestartet werden sollen. Standard ist 50.--concurrency-limit): Maximale Anzahl gleichzeitiger Anfragen über alle Jobs hinweg. Muss ≥ JOB_COUNT sein. Standardmäßig die Jobanzahl; vorsichtig erhöhen.--alias-count): Die Anzahl der Alias-Blöcke in der Abfrage. Dies steuert die Tiefe und Last der Abfrage.--delay): Die Verzögerung zwischen Anfragen in Sekunden. Setzen Sie 0 für keine Verzögerung oder passen Sie sie nach Bedarf an, um das Ziel nicht zu schnell zu überlasten.--max-requests): Die maximale Anzahl von Anfragen, die jeder Job sendet. Verwenden Sie 0 für unbegrenzte Anfragen.Klonen Sie das Repository auf Ihren lokalen Rechner:
git clone https://github.com/kabiri-labs/CVE-2024-40094.git
cd CVE-2024-40094
Führen Sie das Skript aus und geben Sie die gewünschten Optionen in der Befehlszeile an:
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
Das Skript beginnt mit dem Senden von Anfragen an den Zielserver. Sie sehen den Status jeder Anfrage auf der Konsole, und Protokolle werden in die angegebene Logdatei geschrieben.
Beispielausgabe:
[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":[...]}...
Nicht auf nicht autorisierten Zielen verwenden: Dieses Skript ist für Sicherheitsforschung und Tests in kontrollierten Umgebungen vorgesehen. Verwenden Sie es nicht auf Produktionsservern oder Systemen ohne ausdrückliche Genehmigung.
Risiko eines Denial-of-Service: Die Ausführung dieses Skripts gegen einen anfälligen Server kann dazu führen, dass dieser nicht mehr reagiert oder abstürzt. Mit Vorsicht verwenden.
Dieses Skript ist unter der MIT-Lizenz lizenziert. Weitere Informationen finden Sie in der LICENSE-Datei.