Pentest de APIs REST e GraphQL: Checklist Tecnico para Bug Bounty Legal
Metodologia tecnica para testar APIs REST e GraphQL em programas autorizados, com foco em IDOR, bypass de autenticacao e introspeccao maliciosa.
APIs viraram o ponto mais lucrativo de qualquer programa de bug bounty serio, e tambem o mais negligenciado pelos pentesters que ainda focam em XSS no formulario de contato. Um IDOR num endpoint de /api/v3/users/{id}/invoices pode pagar tres a oito mil dolares no HackerOne, enquanto um reflected XSS em pagina marketing fecha em 250. A equipe Basilisk OffSec compilou neste checklist o fluxo exato que usamos em engajamentos autorizados e em programas publicos como GitLab, Shopify e Reddit. Antes de qualquer coisa: leia o escopo, confirme o brand domain, e nunca toque em endpoints fora da lista. Tudo aqui pressupoe autorizacao escrita.
O ponto de partida nunca e o Burp aberto na cara. E o mapeamento de superficie. Pegue o app mobile com apktool, extraia strings de URL, jogue no Burp como sitemap manual. Use ffuf com a wordlist api-endpoints-res.txt da SecLists contra paths como /api/, /v1/, /internal/, /graphql, /gql, /query. Wayback Machine via gau e waybackurls revelam endpoints depreciados que ninguem patcheou. Em uma engagement recente encontramos um /api/v1/admin/export herdado de 2019 que aceitava token de usuario comum, similar ao que descrevemos em Pentest Web do Zero: Montando um Lab Seguro com DVWA, Juice Shop e Burp Suite. Documente cada endpoint com metodo, content-type esperado e papel necessario antes de testar qualquer payload.
IDOR continua sendo o bug numero um em APIs REST por uma razao simples: desenvolvedores confiam no ID vindo do JWT mas leem o ID da URL. Crie duas contas no app alvo, capture as duas sessoes no Burp, e use a extensao Autorize ou Auth Analyzer para reenviar cada request da conta A com o cookie da conta B. Preste atencao em respostas 200 com corpo diferente, nao so em status codes. UUIDs nao sao protecao: enumere via endpoints de busca, exports CSV ou notificacoes. A logica de injecao tambem se aplica em APIs, como mostramos em SQL Injection na Pratica: Explorando, Detectando e Mitigando em Lab Controlado, especialmente em filtros sort, order e search que viram concat de SQL.
GraphQL muda o jogo. Comece testando introspeccao em /graphql com a query {__schema{types{name fields{name}}}}. Se estiver aberto em producao, voce ja tem metade do relatorio escrito. Ferramentas como InQL, GraphQL Voyager e clairvoyance reconstroem schemas mesmo com introspeccao desabilitada via field stuffing. Procure por mutations expostas como adminUpdateUser, impersonate, exportAllData. Batch queries permitem bypass de rate limit: envie 1000 mutations login em uma so request HTTP. Alias overloading quebra validadores ingenuos. Diferente do que cobrimos em XSS Moderno: DOM, Stored e Reflected com Exemplos Reais em Ambiente de Teste, aqui o impacto e quase sempre logico, nao injecao de script.
Bypass de autenticacao nesse contexto vai alem do classico none algorithm no JWT. Teste jku e kid injection, troca de RS256 por HS256 usando a publica como segredo, e tokens de refresh que nunca expiram. Headers como X-Original-URL, X-Rewrite-URL, X-Forwarded-For e X-User-Id frequentemente bypassam middlewares de auth quando a API esta atras de um gateway mal configurado. Em GraphQL, verifique se @auth directive cobre todos os campos ou se algum nested resolver vaza dados sem checagem. SSRF tambem aparece em APIs que aceitam URL como parametro para webhooks ou avatares, padrao que detalhamos em SSRF Descomplicado: Explorando Cloud Metadata em Lab AWS Local com exploits contra IMDS da AWS.
Rate limiting, mass assignment e business logic fecham o checklist. Para mass assignment, adicione campos como isAdmin:true, role:owner, verified:true em qualquer PATCH ou PUT. Frameworks como Rails e NestJS com whitelist incompleta entregam admin no prato. Para race conditions em endpoints de cupom ou saque, use Turbo Intruder com single packet attack do James Kettle, mandando 30 requests simultaneas. Documente impacto com numero de registros expostos, valor financeiro estimado e PoC reproduzivel em curl. Programas pagam pelo impacto demonstrado, nao pela tecnica.
O takeaway pratico: monte um template de relatorio com titulo CWE, passos numerados, request bruto, response truncada e sugestao de fix em uma linha. Submeta cedo, antes de duplicatas, mas nunca sem confirmar escopo. Bug bounty legal e disciplina antes de criatividade, e e nessa disciplina que a Basilisk constroi reputacao em programas como o do Mercado Livre e Nubank.