graphw00f: fingerprinting de endpoints GraphQL

graphw00f · BSD-3-Clause

O graphw00f faz fingerprinting de servidores GraphQL. Ele envia um punhado de queries específicas de engine e, pelo comportamento de erro e resposta, identifica qual implementação GraphQL está rodando — Apollo, Hasura, graphql-ruby, e dezenas mais. Saber a engine te diz quais fraquezas procurar, porque padrões de introspection, comportamento de batching e verbosidade de erro variam por implementação.

Instalação

git clone https://github.com/dolevf/graphw00f.git
cd graphw00f && pip install -r requirements.txt
python main.py -h

Comandos principais

# detecta um endpoint GraphQL, depois faz fingerprint
python main.py -d -f -t https://example.com/graphql

# fornece o endpoint diretamente
python main.py -f -t https://example.com/api/graphql

# com headers
python main.py -f -t https://example.com/graphql 
  -H "Authorization: Bearer TOKEN"

# lista o que ele consegue identificar
python main.py -l

O -d roda detecção (achar o endpoint), o -f roda fingerprinting (identificar a engine).

Saída

[*] Found GraphQL at https://example.com/graphql
[*] Discovered GraphQL Engine: (Apollo)
[!] Attack Surface Matrix: https://github.com/nicholasaleks/graphql-threat-matrix

Onde ele entra no Tandera

O graphw00f roda na fase de analyze do recon_web_lite. É seguro para o fluxo NonIntrusive porque o fingerprinting é um pequeno número de queries benignas. Quando identifica uma engine, estabelece o contexto que o resto da avaliação usa — um endpoint GraphQL é uma superfície de ataque diferente de REST, e a engine determina quais partes dela ficam expostas por padrão.

Usando em um pentest

A engine mapeia para um conjunto conhecido de fraquezas. Uma vez que você sabe que é Apollo versus Hasura, a GraphQL Threat Matrix te diz os comportamentos padrão a verificar — introspection, field suggestions, batching, limite de profundidade. O fingerprinting transforma um genérico “teste o GraphQL” num checklist específico.

Introspection é a primeira coisa a verificar. Se estiver habilitada, você tem o schema completo — todo tipo, query e mutation, incluindo as administrativas que a UI nunca chama. Esse é seu mapa para tudo depois.

Batching habilita ataques que o rate limiter não vê. Algumas engines permitem enviar muitas operações numa requisição. Se o login é uma mutation, o batching de queries pode transformar uma requisição HTTP em centenas de tentativas de senha sob uma única contagem de rate-limit. Verifique se a engine identificada permite isso.

acesso antecipado

Garanta a Tandera antes do próximo engagement.

Entre na waitlist para acesso antecipado. Estamos integrando times de pentest em ondas.

Onboarding prioritário para times de pentest.
Linha direta com quem está construindo.
Preço de acesso antecipado, garantido.

Sem spam, sem cartão. Cancele quando quiser.

enespt-br