Kiterunner: content discovery feito para APIs
Kiterunner · AGPL-3.0
O Kiterunner é content discovery projetado para APIs em vez de sites. Brute-forcers genéricos enviam GET /path; APIs reais usam métodos, headers, parâmetros de path e content types específicos. O Kiterunner reproduz templates de requisição derivados de dezenas de milhares de especificações reais de API, então acha rotas que só respondem a, digamos, POST com corpo JSON.
Instalação
# release binário
wget https://github.com/assetnote/kiterunner/releases/latest/download/kiterunner_linux_amd64.tar.gz
tar xf kiterunner_linux_amd64.tar.gz && sudo mv kr /usr/local/bin/
# wordlists (arquivos kite routes-* da Assetnote)
wget https://wordlists-cdn.assetnote.io/data/kiterunner/routes-large.kite Comandos principais
# scan com uma wordlist kite
kr scan https://api.example.com -w routes-large.kite
# uma lista de hosts
kr scan hosts.txt -w routes-large.kite -o json -O results.json
# carrega um header de auth
kr scan https://api.example.com -w routes-large.kite
-H "Authorization: Bearer TOKEN"
# ajusta concorrência e taxa
kr scan https://api.example.com -w routes-large.kite
--max-connection-per-host 5 -x 10 Saída
{"method":"POST","path":"/api/v2/users/import","status":401,"content_length":52,
"host":"https://api.example.com"} Um 401 aqui é um sinal, não uma falha: a rota existe e exige auth.
Onde ele entra no Tandera
O Kiterunner roda na fase de analyze do recon_api. Seus resultados alimentam a síntese de shadow-endpoints do fluxo — rotas que ele descobre são comparadas contra a especificação documentada da API, e qualquer coisa presente mas não documentada é revelada como superfície oculta.
Usando em um pentest
401 e 403 são os resultados interessantes, não 200. Eles significam que o endpoint existe e está protegido. Um endpoint não documentado que exige auth é exatamente onde a autorização quebrada no nível de objeto tende a viver — teste com e sem credenciais.
Combine o método, ou você não acha nada. A razão de brute-forcers genéricos perderem rotas de API é que só enviam GET. A consciência de método do Kiterunner é o ponto; não recorra a uma wordlist só de GET contra uma API.
Faça diff contra a spec. Se o cliente forneceu um documento OpenAPI, a lacuna entre o que ele documenta e o que o Kiterunner acha é a shadow API — não documentada, e geralmente menos testada.
Limite a taxa contra produção. As listas de rotas são grandes. Limite as conexões e coordene a janela com o cliente.