Vulnerabilidades quick win

Bugs comuns que iniciantes podem encontrar e ser pagos

IDOROpen RedirectDivulgação de informações

O que você vai descobrir

🎯 Por que isso importa

Algumas vulnerabilidades estão em todo lugar se você souber onde procurar. Essas "vitórias rápidas" são acessíveis a novos caçadores, pagam recompensas reais e constroem sua reputação. Foque aqui primeiro antes de partir para cadeias de ataques complexas - você aprenderá as aplicações enquanto ganha dinheiro.

🔍 O que você vai aprender

  • IDOR/BOLA - acessando dados de outros usuários (e por que acontece)
  • Open redirects - onde eles importam e como demonstrar impacto
  • Divulgação de informações - o que realmente paga recompensas
  • Subdomain takeover - reivindicando recursos abandonados
  • Como encadear bugs de baixa severidade em maior impacto

🚀 Sua primeira vitória

Ao final deste capítulo, você conhecerá as vulnerabilidades mais propensas a render sua primeira recompensa - e entenderá POR QUE elas existem para encontrá-las consistentemente.

🔧 Experimente isso agora

Teste IDOR em qualquer aplicação (você precisará de duas contas de teste):

# METODOLOGIA DE TESTE IDOR

# Passo 1: Criar duas contas de teste no alvo
# Usuário A = sua conta principal de teste
# Usuário B = sua conta "vítima" (usar navegador diferente/anônimo)

# Passo 2: Como Usuário A, encontrar requisições que referenciam seu usuário
# Procurar no histórico do Burp por URLs/parâmetros contendo IDs:
GET /api/users/12345/profile     # ID do usuário na URL
GET /api/orders?user_id=12345    # ID do usuário no parâmetro
GET /api/invoices/98765          # ID do recurso (fatura pertence a você)

# Passo 3: Anotar o ID do Usuário B (verificar a URL do perfil dele logado como B)
# Digamos que o ID do Usuário B é 12346

# Passo 4: Logado como Usuário A, mudar o ID para o do Usuário B
# Original (seus dados):
GET /api/users/12345/profile

# Modificado (tentando acessar dados do Usuário B):
GET /api/users/12346/profile

# Passo 5: Analisar a resposta
# Se você ver os dados do Usuário B → vulnerabilidade IDOR!
# Padrões de resposta comuns:
# ✓ 200 OK com dados de outro usuário = IDOR confirmado
# ✗ 403 Forbidden = Autorização funcionando corretamente
# ✗ 404 Not Found = Recurso não existe (tentar IDs válidos)
# ? 200 OK com dados vazios/próprios = Pode estar falhando silenciosamente, testar mais

Indicador de sucesso: Se você conseguir ver os dados do Usuário B enquanto logado como Usuário A, você encontrou uma vulnerabilidade IDOR. A severidade depende de quais dados são expostos.

Habilidades que você vai dominar

Testes de autorização

Identificar quando apps falham em verificar propriedade de recursos

Avaliação de impacto

Determinar severidade baseado em dados expostos e ações

Exploração de redirecionamentos

Demonstrar impacto real de vulnerabilidades de redirecionamento

Encadeamento de bugs

Combinar descobertas de baixa severidade em maior impacto

IDOR (Insecure Direct Object Reference)

"Sua primeira recompensa não precisa ser um P1. Comece com o que é encontrável."

O que é IDOR e por que existe?

IDOR (Insecure Direct Object Reference) — também chamado BOLA (Broken Object Level Authorization) em segurança de API — ocorre quando uma aplicação expõe referências a objetos internos (como IDs de banco de dados) e falha em verificar se o usuário tem permissão para acessá-los.

Por que acontece: Desenvolvedores constroem funcionalidades como "ver meu perfil" ou "baixar minha fatura". O código verifica "o usuário está logado?" mas esquece de verificar "este usuário É DONO deste recurso?" É um erro fácil:

# CÓDIGO VULNERÁVEL (exemplo simplificado)
def get_invoice(request, invoice_id):
    # Verificação: Usuário está logado? ✓
    if not request.user.is_authenticated:
        return "Por favor faça login"

    # Verificação faltando: Este usuário é dono desta fatura? ✗
    invoice = Invoice.objects.get(id=invoice_id)
    return invoice.data  # Retorna QUALQUER fatura para QUALQUER usuário logado

# CÓDIGO SEGURO (como deveria ser)
def get_invoice(request, invoice_id):
    if not request.user.is_authenticated:
        return "Por favor faça login"

    # Verificação: Esta fatura pertence a este usuário? ✓
    invoice = Invoice.objects.get(id=invoice_id, owner=request.user)
    return invoice.data  # Retorna apenas faturas do próprio usuário

Por que é tão comum: A lógica de autorização tem que ser implementada para cada endpoint. Perca um, e você tem um IDOR. Em grandes aplicações com centenas de endpoints, desenvolvedores inevitavelmente perdem alguns. IDOR está consistentemente no OWASP Top 10 porque é fácil de criar e fácil de encontrar.

Onde procurar IDOR

# ALVOS IDOR DE ALTO VALOR (dados sensíveis = severidade mais alta)

Dados de usuário:
/api/users/{id}/profile       # PII: nomes, emails, endereços
/api/users/{id}/settings      # Email, reset de senha, configurações 2FA
/api/users/{id}/notifications # Comunicações privadas

Dados financeiros:
/api/invoices/{id}            # Detalhes de pagamento, histórico de compras
/api/transactions/{id}        # Informações bancárias
/api/orders/{id}              # Detalhes do pedido, endereços de entrega

Documentos:
/api/documents/{id}           # Pode ser qualquer coisa - contratos, registros médicos
/api/attachments/{id}         # Uploads de arquivos
/download?file_id={id}        # Downloads de documentos

Comunicação:
/api/messages/{id}            # Mensagens privadas
/api/conversations/{id}       # Históricos de chat
/api/support-tickets/{id}     # Interações de suporte

# FORMATOS DE ID PARA TESTAR

Inteiros sequenciais: 1234, 1235, 1236 (mais fácil de adivinhar)
UUIDs: 550e8400-e29b-41d4-a716-446655440000 (mais difícil mas ainda vulnerável se vazarem)
IDs codificados: Inteiros codificados em Base64 (decodificar, incrementar, re-codificar)
IDs baseados em hash: Às vezes previsíveis (MD5 do email, etc.)

Matriz de severidade IDOR

Crítico (P1)

Escrita/Exclusão em qualquer conta. Modificar senhas de outros usuários, deletar seus dados, mudar suas permissões.

Alto (P2)

Leitura de PII sensíveis. Acesso a dados financeiros, registros médicos, comunicações privadas, CPFs.

Médio (P3)

Leitura de dados não sensíveis. Acesso a perfis públicos, nomes de usuário, configurações não privadas.

Baixo (P4)

Impacto mínimo. Acesso a informações já públicas ou metadados não sensíveis.

Open Redirect

O que é e por que importa?

Open Redirect — Uma aplicação aceita uma URL controlada pelo usuário e redireciona para ela sem validação. Por si só, isso parece inofensivo, mas permite ataques reais:

  • Phishing: Enviar vítimas para banco-confiavel.com/login?redirect=site-malicioso.com. Eles veem o domínio confiável, clicam, e caem em uma página de login falsa que rouba credenciais.
  • Roubo de tokens OAuth: Se o redirecionamento acontece durante login OAuth, atacantes podem roubar tokens de autenticação redirecionando para seu servidor.
  • Bypass de controles de segurança: Algumas ferramentas de segurança colocam o domínio confiável em whitelist mas não validam parâmetros de redirecionamento.

Por que programas aceitam: Nem todos os programas pagam por open redirects. Muitos exigem impacto demonstrado (encadeado com roubo OAuth, usado em cenário real de phishing). Sempre verifique a política do programa - alguns excluem explicitamente "redirecionamentos não validados" sem encadeamento.

Encontrando e testando open redirects

# PARÂMETROS COMUNS PARA VERIFICAR
?url=
?redirect=
?next=
?return=
?returnTo=
?returnUrl=
?goto=
?destination=
?continue=
?forward=
?target=
?rurl=
?redirect_uri=     # OAuth - alto valor!

# METODOLOGIA DE TESTE

# 1. Encontrar um parâmetro de redirecionamento
https://<target>/login?next=/dashboard

# 2. Tentar domínio externo
https://<target>/login?next=https://attacker.com
# Se redirecionar para attacker.com → open redirect!

# 3. Se bloqueado, tentar técnicas de bypass
//attacker.com                      # URL relativa ao protocolo
/\attacker.com                      # Confusão de backslash
https://attacker.com#.target.com    # Confusão de fragmento
https://target.com.attacker.com     # Subdomínio do atacante
https://attacker.com?.target.com    # Confusão de query string
https://target.com@attacker.com     # Confusão de credenciais
/redirect?url=//attacker.com        # Codificação dupla
%2F%2Fattacker.com                  # Codificado em URL
https:attacker.com                  # Barras faltando
///attacker.com                     # Barras triplas

# 4. Para redirecionamentos OAuth (alto valor)
# Verificar o parâmetro redirect_uri no fluxo OAuth
# Se você conseguir controlar para onde tokens são enviados → potencial de tomada de conta

Dica para demonstrar impacto: Muitos programas rejeitam open redirects sem prova de impacto. No seu relatório, explique o ataque específico: "Um atacante poderia usar este redirecionamento para roubar tokens OAuth durante o fluxo de login, levando a tomada de conta." Ou demonstre um cenário de phishing com capturas de tela.

Divulgação de informações

O que paga vs o que não paga

Nem toda divulgação de informações é igual. Programas se importam com informações que podem ser usadas para ataques adicionais ou prejudicam diretamente os usuários:

Paga bem (Alto impacto):

  • Chaves de API com acesso de escrita — Chaves AWS, chaves Stripe, credenciais de nuvem
  • Credenciais de banco de dados — Mesmo que você não consiga conectar, a exposição é crítica
  • PII de usuários — Emails, endereços, números de telefone vazados
  • Código fonte — Especialmente se contém segredos hardcoded
  • Tokens de autenticação interna — Segredos JWT, chaves de assinatura de sessão

Pode pagar (Impacto médio):

  • Endereços IP internos — Úteis para ataques adicionais
  • Endpoints de debug — Se expõem dados sensíveis
  • Stack traces com caminhos sensíveis — Revelam estrutura interna

Geralmente não paga (Impacto baixo/nenhum):

  • Números de versão de software sozinhos (sem vulnerabilidades conhecidas)
  • Mensagens de erro genéricas
  • Endereços de email que já são públicos
  • "Você está usando nginx" sem impacto de segurança

Onde encontrar divulgação de informações

# CAMINHOS SENSÍVEIS COMUNS PARA VERIFICAR

# Arquivos de configuração
/.env                    # Variáveis de ambiente (frequentemente contém chaves de API!)
/config.json
/config.yml
/settings.py             # Configurações Django
/wp-config.php           # WordPress (frequentemente bloqueado mas tente)

# Exposição de controle de versão
/.git/config             # Se acessível, todo o repo pode ser baixável
/.git/HEAD
/.svn/entries

# Endpoints de debug e admin
/debug
/trace
/actuator                # Spring Boot - mina de ouro de informações
/actuator/env
/actuator/heapdump
/_debug_toolbar/
/phpinfo.php
/server-status           # Página de status Apache
/nginx_status

# Documentação de API (pode requerer auth mas frequentemente pública)
/api/swagger.json
/api/swagger-ui.html
/swagger/
/api-docs
/graphql                 # Introspection GraphQL

# Arquivos de backup e temporários
/backup.sql
/database.sql
/*.bak
/*.old
/*.tmp
/backup/

# PROCURANDO SEGREDOS EM ARQUIVOS JAVASCRIPT

# Baixar todos os arquivos JS e procurar strings sensíveis:
# No devtools do navegador → Sources → Busca (Ctrl+Shift+F)

Procurar por:
api_key
apikey
secret
password
token
private_key
AWS
sk_live          # Chave live do Stripe
sk_test          # Chave teste do Stripe
AKIA             # Prefixo de chave de acesso AWS
ghp_             # Token de acesso pessoal GitHub
bearer

# Dica pro: Use ferramentas como truffleHog ou gitleaks em bundles JS baixados

Subdomain takeover

Como funciona o subdomain takeover

Subdomain takeover acontece quando:

  1. Uma empresa configura blog.empresa.com apontando para Heroku, GitHub Pages ou similar
  2. Eles param de usar o serviço e deletam o app, mas esquecem de remover o registro DNS
  3. O subdomínio ainda aponta para o serviço, mas ninguém reivindicou aquele recurso
  4. Um atacante cria uma conta no serviço e reivindica aquele nome de recurso
  5. Agora o atacante controla o conteúdo em blog.empresa.com!

Impacto: Atacantes podem servir páginas de phishing, roubar cookies (se o subdomínio é confiado pelo domínio pai), hospedar malware e danificar reputação - tudo parecendo vir da empresa legítima.

Detecção e verificação

# INDICADORES DE SUBDOMÍNIOS VULNERÁVEIS

# GitHub Pages
"There isn't a GitHub Pages site here."

# Heroku
"No such app"
"Heroku | No such app"

# AWS S3
"NoSuchBucket"
"The specified bucket does not exist"

# Azure
"404 Web Site not found"

# Shopify
"Sorry, this shop is currently unavailable."

# Tumblr
"There's nothing here."
"Whatever you were looking for doesn't currently exist at this address."

# Zendesk
"Help Center Closed"

# DETECÇÃO AUTOMATIZADA

# Usando Nuclei (mais eficiente)
nuclei -t takeovers/ -l subdomains.txt
# Isso roda todos os templates de subdomain takeover contra sua lista

# Usando subjack
subjack -w subdomains.txt -t 100 -timeout 30

# IMPORTANTE: NÃO faça o takeover real dos subdomínios!
# Apenas reporte a vulnerabilidade com evidência de que é vulnerável
# Tomar controle de um subdomínio que você não possui é acesso não autorizado

# Evidência para incluir no relatório:
# 1. Captura de tela da mensagem de erro
# 2. Registros DNS mostrando a configuração
# 3. Explicação de qual serviço é afetado
# 4. Prova de que o recurso não está registrado (se possível verificar)

Exemplos reais de recompensas

🏆 $500 por IDOR em endpoint de fatura

O caçador notou URLs como /api/invoices/12345 ao baixar sua própria fatura. Ele mudou o ID para 12346 e recebeu a fatura de outro cliente - completa com nome, endereço e histórico de compras.

Técnica: Mudou um número na URL. Precisou de duas contas de teste e 5 minutos de teste. A vulnerabilidade era trivial de encontrar mas tinha impacto real na privacidade dos clientes.

🏆 $300 por chave de API Stripe exposta

Procurando em bundles JavaScript, o caçador encontrou uma chave de API Stripe começando com sk_live_. A chave tinha permissões de escrita - um atacante poderia ter criado cobranças fraudulentas ou acessado dados de pagamento dos clientes.

Técnica: Devtools do navegador → Sources → Buscar "sk_live". A chave estava hardcoded em um bundle webpack. Levou 10 minutos para encontrar.

🏆 $1.000 por open redirect no fluxo OAuth

O login OAuth tinha um parâmetro redirect_uri que aceitava qualquer URL. O caçador demonstrou que um atacante poderia criar um link que, após login bem-sucedido, redirecionaria o usuário (e seu token de autenticação) para um servidor controlado pelo atacante.

Técnica: Identificou fluxo OAuth, testou parâmetro redirect_uri com domínio externo. A cadeia de open redirect → roubo de token → tomada de conta elevou isso de P4 para P2.

Perguntas frequentes

Isso parece direto demais. Realmente paga?

Sim. IDOR é consistentemente a vulnerabilidade de API #1 porque está em todo lugar. Desenvolvedores têm que implementar verificações de autorização para cada endpoint - perca um e você tem um IDOR. Bugs diretos com impacto real pagam dinheiro real. Não complique sua abordagem - comece procurando por problemas óbvios. Conforme ganha experiência, você desenvolverá um olho para variações mais sutis.

E se eu só conseguir encontrar bugs de baixa severidade?

Bugs de baixa severidade ainda pagam, ainda constroem sua reputação, e ensinam como a aplicação funciona. Muitos caçadores encadeiam múltiplos bugs de baixa severidade para criar maior impacto. Um open redirect sozinho pode ser P4, mas encadeie com roubo de token OAuth e se torna P2. Encontrar P4s é como você aprende a encontrar P1s.

Como sei se um IDOR está no escopo?

Use duas contas que você controla - nunca acesse dados pertencentes a usuários reais. Seu teste deve ser: "A Conta A consegue acessar os dados da Conta B?" onde ambas as contas são suas. Se você encontrar um IDOR, reporte imediatamente. Não enumere dados de outros usuários ou baixe nada além do necessário para provar que o bug existe.

Meu relatório de open redirect foi fechado como "informativo". Por quê?

Muitos programas não pagam por open redirects sem impacto demonstrado. No seu relatório, explique o cenário de ataque: phishing, roubo de token OAuth ou bypass de controles de segurança. Se é usado em um fluxo OAuth, enfatize o potencial de roubo de token. Alguns programas ainda não vão aceitar - verifique a política deles antes de investir tempo.

🎯 Você conhece as vitórias rápidas!

IDOR, open redirects, divulgação de informações, subdomain takeover - você agora entende não apenas como encontrar essas vulnerabilidades mas POR QUE elas existem. Esse entendimento mais profundo vai ajudá-lo a encontrá-las consistentemente.

IDOR Open Redirect Divulgação de Info Subdomain Takeover

Pronto para escrever relatórios vencedores →

Validação de Conhecimento

Demonstre sua compreensão para ganhar pontos e progredir

1
Pergunta do Capítulo

Qual vulnerabilidade do OWASP Top 10 envolve acessar recursos usando IDs sequenciais?

1
Ler
2
Validar
3
Concluir

Pronto para acompanhar seu progresso?

Crie uma conta gratuita para salvar seu progresso, ganhar pontos e acessar mais de 170 labs práticos de cibersegurança.

Comece a Aprender Grátis
Junte-se a 5.000+ hackers aprendendo cibersegurança com labs práticos. Criar Conta