Pentesting de API Web

Reading time: 7 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Resumo da Metodologia de Pentesting de APIs

Pentesting de APIs envolve uma abordagem estruturada para descobrir vulnerabilidades. Este guia encapsula uma metodologia abrangente, enfatizando técnicas e ferramentas práticas.

Entendendo os Tipos de API

  • SOAP/XML Web Services: Use o formato WSDL para documentação, tipicamente encontrado em caminhos ?wsdl. Ferramentas como SOAPUI e WSDLer (Burp Suite Extension) são úteis para analisar e gerar requisições. Documentação de exemplo está acessível em DNE Online.
  • REST APIs (JSON): A documentação frequentemente vem em arquivos WADL, mas ferramentas como Swagger UI fornecem uma interface mais amigável para interação. Postman é uma ferramenta valiosa para criar e gerenciar requisições de exemplo.
  • GraphQL: Uma query language para APIs que oferece uma descrição completa e compreensível dos dados na sua API.

Practice Labs

  • VAmPI: Uma API deliberadamente vulnerável para prática hands-on, cobrindo as vulnerabilidades OWASP top 10 para APIs.

Effective Tricks for API Pentesting

  • SOAP/XML Vulnerabilities: Explore vulnerabilidades XXE, embora declarações DTD frequentemente sejam restritas. Tags CDATA podem permitir a inserção de payloads se o XML permanecer válido.
  • Privilege Escalation: Teste endpoints com níveis de privilégio variados para identificar possibilidades de acesso não autorizado.
  • CORS Misconfigurations: Investigue as configurações de CORS para possível explorabilidade via ataques CSRF a partir de sessões autenticadas.
  • Endpoint Discovery: Aproveite padrões de API para descobrir endpoints ocultos. Ferramentas como fuzzers podem automatizar esse processo.
  • Parameter Tampering: Experimente adicionar ou substituir parâmetros em requisições para acessar dados ou funcionalidades não autorizadas.
  • HTTP Method Testing: Varie os métodos de requisição (GET, POST, PUT, DELETE, PATCH) para descobrir comportamentos inesperados ou divulgações de informação.
  • Content-Type Manipulation: Mude entre diferentes content types (x-www-form-urlencoded, application/xml, application/json) para testar problemas de parsing ou vulnerabilidades.
  • Advanced Parameter Techniques: Teste com tipos de dados inesperados em payloads JSON ou brinque com dados XML para injeções XXE. Também tente parameter pollution e caracteres curinga para testes mais amplos.
  • Version Testing: Versões mais antigas da API podem ser mais suscetíveis a ataques. Sempre verifique e teste múltiplas versões da API.

Autorização & Lógica de Negócio (AuthN != AuthZ) — armadilhas do tRPC/Zod protectedProcedure

Stacks TypeScript modernos frequentemente usam tRPC com Zod para validação de entrada. No tRPC, protectedProcedure tipicamente garante que a requisição possui uma sessão válida (authentication) mas não implica que o caller tem o papel/permissões corretas (authorization). Essa discrepância leva a Broken Function Level Authorization/BOLA se procedimentos sensíveis forem protegidos apenas por protectedProcedure.

  • Threat model: Qualquer usuário autenticado com baixo privilégio pode chamar procedimentos de nível admin se verificações de role/permissão estiverem ausentes (ex.: migrações background, feature flags, manutenção em tenant-wide, controle de jobs).
  • Black-box signal: Endpoints POST /api/trpc/<router>.<procedure> que têm sucesso para contas básicas quando deveriam ser exclusivos de admins. Signups self-serve aumentam drasticamente a explorabilidade.
  • Typical tRPC route shape (v10+): JSON body wrapped under {"input": {...}}.

Example vulnerable pattern (no role/permission gate):

ts
// The endpoint for retrying a migration job
// This checks for a valid session (authentication)
retry: protectedProcedure
// but not for an admin role (authorization).
.input(z.object({ name: z.string() }))
.mutation(async ({ input, ctx }) => {
// Logic to restart a sensitive migration
}),

Exploração prática (black-box)

  1. Registre uma conta normal e obtenha uma sessão autenticada (cookies/headers).
  2. Enumere tarefas em segundo plano ou outros recursos sensíveis via procedimentos “list”/“all”/“status”.
bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{}}'
  1. Invocar ações privilegiadas, como reiniciar um job:
bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{"name":"<migration_name>"}}'

Impacto a avaliar

  • Corrupção de dados via reinícios não-idempotentes: Forçar execuções concorrentes de migrações/workers pode criar condições de corrida e estados parciais inconsistentes (perda silenciosa de dados, análises corrompidas).
  • DoS via worker/DB starvation: Acionar repetidamente jobs pesados pode esgotar pools de workers e conexões do banco de dados, causando outages que afetam todo o tenant.

Ferramentas e Recursos para API Pentesting

  • kiterunner: Excelente para descobrir endpoints de API. Use-o para escanear e brute force paths e parâmetros contra APIs alvo.
bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
  • https://github.com/BishopFox/sj: sj é uma ferramenta de linha de comando projetada para auxiliar na auditoria de exposed Swagger/OpenAPI definition files verificando os endpoints de API associados quanto à autenticação fraca. Também fornece modelos de comando para testes manuais de vulnerabilidades.
  • Ferramentas adicionais como automatic-api-attack-tool, Astra, e restler-fuzzer oferecem funcionalidades específicas para testes de segurança de API, que vão desde simulação de ataques até fuzzing e escaneamento de vulnerabilidades.
  • Cherrybomb: É uma ferramenta de segurança de API que audita sua API com base em um arquivo OAS (a ferramenta é escrita em rust).

Recursos para Aprendizado e Prática

  • OWASP API Security Top 10: Leitura essencial para entender as vulnerabilidades comuns em APIs (OWASP Top 10).
  • API Security Checklist: Uma lista de verificação abrangente para proteger APIs (GitHub link).
  • Logger++ Filters: Para caçar vulnerabilidades em API, o Logger++ oferece filtros úteis (GitHub link).
  • API Endpoints List: Uma lista selecionada de endpoints de API potenciais para fins de teste (GitHub gist).

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks