
Este script explora a vulnerabilidade CVE-2024-40094 em graphql-java
Este script explora a vulnerabilidade CVE-2024-40094 no graphql-java ao acionar uma negação de serviço baseada em ExecutableNormalizedFields (ENF). Ele constrói uma consulta de introspecção GraphQL maliciosa com aliases profundamente aninhados, projetada para sobrecarregar o servidor vulnerável.
O script utiliza requisições assíncronas para enviar uma série de consultas de introspecção de grande porte para um servidor GraphQL de destino. As consultas são enviadas como payloads JSON e são estruturadas para explorar uma vulnerabilidade específica na forma como os servidores GraphQL lidam com consultas de introspecção profundamente aninhadas. Ao disparar um grande número dessas consultas em paralelo, o script visa causar uma condição de negação de serviço em sistemas vulneráveis.
asyncio e aiohttp para requisições eficientes e não bloqueantes.Este exploit tem como alvo servidores que executam uma versão vulnerável do graphql-java, especificamente aqueles que não lidam corretamente com consultas de introspecção profundamente aninhadas.
graphql-java (versões vulneráveis ao CVE-2024-40094)Para executar o exploit, você precisa de Python 3.7+ com as seguintes dependências:
aiohttp para requisições HTTP assíncronasurllib3 para manipulação de SSL (desativa avisos de certificado autoassinado)Você pode instalar as dependências necessárias usando o pip:
pip install aiohttp urllib3
Todos os parâmetros principais podem ser fornecidos em tempo de execução por meio de opções de linha de comando:
--url): A URL da API GraphQL de destino.--header): Personalize o token de autorização e outros cabeçalhos conforme necessário. As requisições enviam corpos JSON, portanto inclua Content-Type: application/json. A opção pode ser repetida.--job-count): O número de jobs (corrotinas) concorrentes a serem iniciados. O padrão é 50.--concurrency-limit): Número máximo de requisições simultâneas em todos os jobs. Deve ser ≥ JOB_COUNT. O padrão é o número de jobs; aumente com cautela.--alias-count): O número de blocos de alias na consulta. Isso controla a profundidade e a carga da consulta.--delay): O atraso entre as requisições em segundos. Defina como 0 para sem atraso ou ajuste conforme necessário para evitar sobrecarregar o alvo rapidamente demais.--max-requests): O número máximo de requisições que cada job enviará. Use 0 para requisições ilimitadas.Clone o repositório para sua máquina local:
git clone https://github.com/kabiri-labs/CVE-2024-40094.git
cd CVE-2024-40094
Execute o script, fornecendo as opções desejadas na linha de comando:
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
O script começará a enviar requisições ao servidor de destino. Você verá o status de cada requisição impresso no console, e os logs serão gravados no arquivo de log especificado.
Exemplo de Saída:
[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":[...]}...
Não Use em Alvos Não Autorizados: Este script é destinado à pesquisa de segurança e testes em ambientes controlados. Não o use em servidores de produção ou sistemas sem autorização explícita.
Risco de Negação de Serviço: Executar este script contra um servidor vulnerável pode fazer com que ele fique sem resposta ou caia. Use com cautela.
Este script é licenciado sob a Licença MIT. Consulte o arquivo LICENSE para mais detalhes.