O Origin em que ele confiou: uma reflexão de CORS com credenciais

Segurança Web & API Nível 3/4 ~5 min 25 de outubro de 2026

O desafio

A API de contas da Halcyon responde a requisições do navegador vindas do próprio app web e, para funcionar em alguns domínios, a equipe deixou o servidor decidir a cada requisição. Ele lê o header Origin que o navegador envia e, se parecer um dos seus, devolve esse valor direto como a origem permitida e diz que credenciais são bem-vindas. A página de um atacante pode enviar qualquer Origin que quiser. Mude o Origin para o site do atacante e leia o que a API devolve para ele.

O que você vai aprender

  • Explicar o que Access-Control-Allow-Origin e -Allow-Credentials fazem juntos
  • Reconhecer que refletir um Origin arbitrário junto com credenciais equivale a permitir todos os sites
  • Reproduzir a leitura enviando um Origin do atacante
  • Explicar por que o navegador então deixa a página do atacante ler a resposta
  • Indicar a correção baseada em allowlist e a proibição de wildcard combinado com credenciais

Habilidades testadas

Análise de CORSManipulação de cabeçalhos HTTPModelo de segurança do navegador

Pré-requisitos

  • A same-origin policy em linhas gerais
  • O que é o cabeçalho Origin

Como funciona

O CORS permite que um servidor autorize outras origens específicas a ler suas respostas. O servidor informa a origem permitida em Access-Control-Allow-Origin e pode adicionar Access-Control-Allow-Credentials: true para permitir cookies. O navegador aplica o que o servidor disser.

Refletir o Origin da requisição literalmente nesse cabeçalho, junto com a permissão de credenciais, diz ao navegador que qualquer site que fez a requisição pode ler a resposta com os cookies da vítima. Isso significa todas as origens, que é exatamente o que a regra explícita contra Allow-Origin: * com credenciais pretendia impedir; a reflexão contorna a regra e produz o mesmo efeito.

Uma vítima logada que visita a página do atacante dispara uma requisição com credenciais, e o script do atacante tem permissão para ler o corpo privado.

Erros comuns

  • Deixar o origin real do app. Também funciona, mas o ponto é que um site sob seu controle também é aceito.
  • Remover o cookie. Sem a sessão da vítima a API retorna 401; o ataque depende de o navegador anexá-lo automaticamente.
  • Responder com o valor de um cabeçalho. O prêmio são os dados da conta no corpo, especificamente o email.
  • Achar que a same-origin policy protege isso. O servidor a dispensou explicitamente ao refletir o origin e permitir credenciais.

Como se proteger

Valide o origin; nunca o reflita às cegas junto com credenciais.

  • Compare o Origin com uma allowlist estrita e devolva apenas um valor conhecido que tenha correspondido.
  • Nunca combine Access-Control-Allow-Credentials: true com um origin refletido ou wildcard.
  • Mantenha leituras sensíveis atrás de uma autorização que não dependa da same-origin policy do navegador e restrinja bem o escopo dos cookies.

Solução completa

Membros Pro e Max desbloqueiam o passo a passo completo.

Assinar Pro

Estatísticas da comunidade

174 resoluções
92% taxa de sucesso
M2F14M3 Primeiro sangue

Hacks de hoje relacionados

38.000+ Hackers Labs reais Grátis
Comece Grátis ou resolva o hack de hoje, sem conta