Security · 60 min

Explore uma API e Infra Vulneráveis

Persiga uma dependency injection ausente por três endpoints expostos — broken access control que vaza uma flag direto dos logs, e um SSRF que a alcança por um segundo caminho — num sandbox local descartável.

Premium

Problema

Uma única linha de código ausente pode expor uma superfície administrativa inteira. É comum construir uma dependency de autorização corretamente (uma função que valida um header `X-Admin-Token` e rejeita a requisição se ele estiver ausente ou errado) e depois simplesmente esquecer de anexá-la a uma ou mais rotas quando elas são registradas no router. A dependency existe, tem teste unitário, e parece correta isoladamente — mas se ela nunca foi conectada ao router para um dado endpoint, esse endpoint não autentica ninguém. Isso é **broken access control** (OWASP API1/API5, "Broken Object/Function Level Authorization"), e é uma das vulnerabilidades de API mais comuns no mundo real precisamente porque é invisível numa revisão de código que só olha para a função da dependency em si. Uma vez que você achou um painel admin sem autenticação, o raio de impacto frequentemente se estende além de "ler alguns dados" — um endpoint que busca uma URL em nome do servidor, pensado só para uso interno, pode virar um primitivo de **Server-Side Request Forgery (SSRF)**: uma forma de fazer o próprio servidor emitir uma requisição a um recurso só-interno que um cliente normal nunca conseguiria alcançar diretamente. Neste lab você vai rodar a **DARE Vulnerable AI Suite** localmente e atacar seu desafio `vulnerable-api-infra`: uma única causa raiz (uma dependency de rota sem autenticação) exposta através de três caminhos separados — um endpoint de sessões, um endpoint de logs que vaza um segredo diretamente, e um endpoint de webhook-preview que vaza o mesmo segredo de novo via SSRF. > Pratique só contra a suíte descartável `dare-vulnerable-ai` rodando > localmente em `127.0.0.1:8000` (vinculada só ao localhost), com logs > e endpoints internos sintéticos. Nunca tente broken access control ou > sondagem de SSRF contra uma API real, um endpoint de metadados de > nuvem, ou qualquer sistema que você não seja dono ou não tenha > autorização explícita por escrito para testar.

Objetivos

Ao final deste lab você será capaz de:

Pré-requisitos

Para completar este lab você vai precisar de:

Uma causa raiz, três exposições

require_admin_token()  ← existe, checa corretamente o X-Admin-Token, tem teste unitário

Registro no router:
  /api/admin/panel/sessions              ──▶ dependency NÃO anexada
  /api/admin/panel/logs                  ──▶ dependency NÃO anexada
  /api/admin/panel/integrations/webhook-preview ──▶ dependency NÃO anexada

Nenhuma dessas rotas está sem um conceito de autorização — a
dependency require_admin_token é código real que rejeitaria uma
requisição sem autenticação se de fato estivesse conectada ao router
para esses caminhos. Ela só não foi anexada quando essas três rotas
foram registradas. Esse é o bug inteiro: não uma checagem falha, uma
checagem que nunca foi plugada.

Por que isso é perigoso além de "você consegue ler alguns dados"

Como você vai trabalhar neste lab

  1. Desbloqueie o desafio.
  2. Acesse /sessions sem headers nenhum e prove que nada é
    reforçado.
  3. Acesse /logs sem headers nenhum e ache a flag vazando
    diretamente.
  4. Confirme que /internal/ops-metadata recusa uma chamada externa
    direta (403), depois alcance-o mesmo assim via webhook-preview
    (SSRF) e pegue a mesma flag por um segundo caminho.
  5. Leia a solução oficial e explique por que isso é uma causa raiz,
    não três bugs separados.

Passos

Conteúdo exclusivo para assinantes. Ver planos