
Este script explota la vulnerabilidad CVE-2024-40094 en graphql-java
Este script explota la vulnerabilidad CVE-2024-40094 en graphql-java desencadenando una denegación de servicio basada en ExecutableNormalizedFields (ENF). Construye una consulta de introspección GraphQL manipulada con alias profundamente anidados, diseñada para abrumar al servidor vulnerable.
El script utiliza solicitudes asíncronas para enviar una serie de consultas de introspección grandes a un servidor GraphQL objetivo. Las consultas se envían como cargas útiles JSON y están estructuradas para explotar una vulnerabilidad específica en cómo los servidores GraphQL manejan consultas de introspección profundamente anidadas. Al activar un gran número de dichas consultas en paralelo, el script busca causar una condición de denegación de servicio en sistemas vulnerables.
asyncio y aiohttp para solicitudes eficientes y no bloqueantes.Este exploit apunta a servidores que ejecutan una versión vulnerable de graphql-java, específicamente aquellos que no manejan adecuadamente las consultas de introspección profundamente anidadas.
graphql-java (versiones vulnerables a CVE-2024-40094)Para ejecutar el exploit, necesitas Python 3.7+ con las siguientes dependencias:
aiohttp para solicitudes HTTP asíncronasurllib3 para manejo de SSL (desactiva advertencias de certificados autofirmados)Puedes instalar las dependencias requeridas usando pip:
pip install aiohttp urllib3
Todos los parámetros clave se pueden proporcionar en tiempo de ejecución mediante opciones de línea de comandos:
--url): La URL del API GraphQL objetivo.--header): Personaliza el token de Autorización y otros encabezados según sea necesario. Las solicitudes envían cuerpos JSON, así que incluye Content-Type: application/json. La opción se puede repetir.--job-count): El número de trabajos concurrentes (corrutinas) a crear. El valor predeterminado es 50.--concurrency-limit): Número máximo de solicitudes simultáneas en todos los trabajos. Debe ser ≥ JOB_COUNT. Por defecto es igual al número de trabajos; aumenta con precaución.--alias-count): El número de bloques de alias en la consulta. Esto controla la profundidad y la carga de la consulta.--delay): El retardo entre solicitudes en segundos. Establece a 0 para sin retardo o ajústalo según sea necesario para evitar abrumar al objetivo demasiado rápido.--max-requests): El número máximo de solicitudes que cada trabajo enviará. Usa para solicitudes ilimitadas.Clona el repositorio en tu máquina local:
git clone https://github.com/kabiri-labs/CVE-2024-40094.git
cd CVE-2024-40094
Ejecuta el script, proporcionando las opciones deseadas en la línea de comandos:
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
El script comenzará a enviar solicitudes al servidor objetivo. Verás el estado de cada solicitud impreso en la consola, y los registros se escribirán en el archivo de registro especificado.
Ejemplo de salida:
[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":[...]}...
No usar en objetivos no autorizados: Este script está destinado a la investigación de seguridad y pruebas en entornos controlados. No lo uses en servidores de producción o sistemas sin autorización explícita.
Riesgo de denegación de servicio: Ejecutar este script contra un servidor vulnerable puede hacer que se vuelva no responsivo o se bloquee. Úsalo con precaución.
Este script está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
0