Adultere o ID da Fatura: Um Walkthrough de IDOR / Broken Object Level Authorization

Segurança Web & API Nível 2/4 ~1 min 21 de junho de 2026

O desafio

Esta é a requisição exata que seu navegador enviou para carregar a sua própria fatura, a #1019. O servidor verificou seu cookie de sessão - mas verificou se a fatura é sua? Mude o id, envie e leia a fatura #1020.

O que você vai aprender

  • Reconhecer uma referência direta insegura a objeto (IDOR) em que o id de um registro é confiado diretamente a partir da requisição
  • Diferenciar autenticação (quem você é) de autorização (o que você tem permissão para acessar)
  • Adulterar um único parâmetro em uma requisição HTTP capturada e reenviá-la para alcançar o objeto de outro usuário
  • Ler uma resposta HTTP/JSON para confirmar que você recebeu um registro que não é seu
  • Explicar por que uma verificação de propriedade por objeto é a correção correta, e não um login mais rigoroso

Habilidades testadas

Interceptação de requisições HTTP e adulteração de parâmetros (edição estilo Burp)Identificação de broken object level authorization (BOLA / IDOR)Leitura e interpretação de respostas de API em JSONRaciocínio sobre a lógica de controle de acesso em APIs web

Pré-requisitos

  • Entendimento básico de uma requisição HTTP (método, caminho, query string, headers, cookies)
  • Familiaridade com o modo como um cookie de sessão autentica um usuário logado
  • Facilidade para ler um corpo de resposta JSON pequeno

Como funciona

Uma referência direta insegura a objeto (IDOR) acontece quando uma aplicação expõe uma referência a um objeto interno - uma linha de banco de dados, um arquivo, uma fatura - diretamente na requisição e então confia nessa referência sem verificar se quem está chamando tem permissão para acessar aquele objeto específico. O formato clássico é um id numérico em uma URL ou query string, como /api/invoice?id=1019. Como o id é sequencial e previsível, um atacante pode simplesmente trocá-lo por um valor vizinho e pedir o registro de outra pessoa.

O detalhe sutil é que o endpoint não é desautenticado. O servidor validou corretamente o cookie de sessão, então ele sabe qual usuário está chamando. O erro é que ele parou por aí: nunca fez a segunda pergunta - essa fatura realmente pertence ao usuário logado? Verificar identidade (autenticação) não é o mesmo que verificar permissão a um objeto específico (autorização). Quando essa verificação por objeto está ausente, a falha também é chamada de broken object level authorization (BOLA), o risco número um no OWASP API Security Top 10.

Este desafio reproduz exatamente essa lacuna. Você tem em mãos uma requisição real e capturada para a sua própria fatura. O id aparece na requisição como texto simples e editável, e nada no formato da resposta sugere que o servidor diferencia os seus registros dos de qualquer outra pessoa - o que é exatamente o sinal de que a autorização está sendo pulada.

Erros comuns

  • Supor que um login válido é suficiente. Muitos aprendizes veem o cookie de sessão e concluem que o endpoint é seguro. A autenticação só prova quem está chamando; ela não diz nada sobre quais objetos esse chamador pode ler.
  • Editar a parte errada da requisição. O caminho, o host e o cookie devem permanecer exatamente como capturados. Só a referência ao objeto - o valor do id - precisa mudar, e apenas esse campo está em jogo aqui.
  • Parar em um 404 e desistir. Uma resposta de não encontrado só significa que aquele id não existe; é um retorno, não um obstáculo. Ajuste o id para um valor que provavelmente seja um registro real e vizinho.
  • Tratar IDOR como um bug de injeção. Não são necessários caracteres especiais, encoding ou payload. Você troca um id legítimo por outro id legítimo - a vulnerabilidade é a falta de controle de acesso, não uma entrada não sanitizada.

Como se proteger

A correção é uma verificação de propriedade em nível de objeto em todo acesso. Depois que a sessão é autenticada, o servidor precisa confirmar que o objeto solicitado pertence (ou é compartilhado com) aquele usuário antes de retorná-lo - por exemplo, restringindo a consulta ao chamador: SELECT * FROM invoice WHERE id = ? AND owner_user_id = :sessionUser. Se a linha não corresponder, retorne 404 ou 403 e nunca os dados. Reforçar o fluxo de login não resolve nada aqui, porque o atacante já está logado.

  • Aplique a autorização por objeto no servidor; nunca confie que o cliente vai solicitar apenas os ids que ele "deveria" conhecer.
  • Prefira identificadores imprevisíveis (UUIDs) a inteiros sequenciais para eliminar a enumeração fácil, mantendo ainda a verificação de propriedade - obscuridade sozinha não é controle de acesso.
  • Registre e alerte tentativas de acesso que falham na verificação de propriedade, especialmente varreduras sequenciais de id.

Solução completa

Membros Pro e Max desbloqueiam o passo a passo completo.

Assinar Pro

Estatísticas da comunidade

47 resoluções
55% taxa de sucesso
Malekith Primeiro sangue

Vá mais fundo

Hacks de hoje relacionados

25.000+ Hackers 100+ Labs & Cursos Grátis
Comece Grátis