CEVIU Logo
Voltar
CORS mal compreendido: risco real de segurança em aplicações web

CORS mal compreendido: risco real de segurança em aplicações web

Aprofundamento CEVIU

Aprofundamento

O CORS não é um firewall, nem uma camada de autenticação, é um contrato entre navegador e servidor sobre quais origens podem ler respostas. Quando mal configurado, ele não bloqueia requisições (o navegador as faz normalmente), mas permite que sites maliciosos leiam respostas sensíveis de APIs autenticadas. O caso do Zoom em 2019 foi o primeiro grande alerta prático: usar um 'hack de imagem' para burlar o CORS revelou que a equipe ignorava que localhost não é isento de políticas CORS, Chrome, Firefox e Safari aplicam restrições completas ali desde 2017. A falha não foi técnica, mas conceitual: confundir 'não bloquear requisição' com 'permitir leitura da resposta'.

Isso se repete hoje com CVEs recentes como o CVE-2026-32610 no Glances, onde o middleware Starlette refletia qualquer cabeçalho Origin mesmo com allow_credentials=True, ou o CVE-2024-25124 no Fiber, que aceitava configurações contraditórias (* + credenciais) até a versão 2.52.1. Em todos os casos, o problema não está na implementação do navegador, mas na falsa segurança gerada por ferramentas de desenvolvimento (como Postman ou curl) que ignoram CORS, levando devs a acreditar que 'funciona localmente' significa 'está seguro em produção'.

O que mudou

A cobertura CEVIU anterior tratou de falhas de XSS, SSRF e má configuração de APIs, mas nenhuma delas abordou o erro de modelo mental central aqui: a confusão entre controle de requisição (que o CORS não faz) e controle de leitura de resposta (que ele sim regula). A novidade desta notícia é que ela conecta explicitamente essa falha conceitual a riscos reais em 2026, como o CVE-2026-32610 no Glances, e mostra que o padrão de 'copiar e colar middleware CORS com * + credentials' ainda é comum em stacks Python (FastAPI, Starlette) e Go (Fiber), mesmo após anos de alertas. Não houve mudança de especificação, mas sim a consolidação de um padrão perigoso como prática corrente.

Por que isso importa

Desenvolvedores que não entendem CORS estão, sem saber, escrevendo código que funciona em desenvolvimento e quebrando em produção, ou pior: funcionando de forma insegura em produção. Isso afeta diretamente a experiência do desenvolvedor (DX): frameworks modernos como FastAPI e Next.js incluem middlewares CORS 'prontos', mas sua má configuração vira uma vulnerabilidade crítica em minutos. Mais grave: quando combinado com credenciais (cookies, headers de autorização), um CORS mal configurado transforma qualquer XSS em um ataque de exfiltração de dados privilegiados, como visto no Spring Authorization Server (CVE-2026-22752) e no Dify (CVE-2025-63388). Isso não é 'configuração avançada': é a primeira linha de defesa contra roubo de sessão em aplicações web.

Linha do tempo

  1. CVE-2026-22752 no Spring Authorization Server permite XSS e SSRF via má configuração de endpoints OAuth

  2. Google publica exploit para bug na Fetch API do Chromium que contorna políticas de origem

  3. CVE-2025-63388 divulgado no Dify: CORS excessivamente permissivo com credenciais ativadas

  4. Análise aprofundada do risco real de CORS mal compreendido, com foco em casos práticos e CVEs recentes

Perguntas frequentes

Por que definir Access-Control-Allow-Origin: * com allow_credentials: true é proibido?

É uma contradição explícita na especificação do CORS. O navegador rejeita essa combinação porque permitiria que qualquer site lesse respostas autenticadas (como cookies de sessão). Se seu backend precisa de credenciais, você deve listar origens específicas, nunca usar curinga.

O localhost realmente ignora CORS?

Não. Essa é uma crença errada. Navegadores modernos aplicam CORS integralmente em localhost. O que acontece é que muitos servidores locais não enviam cabeçalhos CORS, então o navegador assume 'não permitido'. A ausência de política não é permissão, é negação implícita.

Como testar se meu CORS está seguro em produção?

Não confie em ferramentas como Postman. Use o navegador: abra uma página HTML hospedada em outro domínio (ex: glitch.me), tente uma requisição fetch para sua API com credenciais, e verifique se o console mostra erro de CORS ou se a resposta é lida. Também valide se o cabeçalho Access-Control-Allow-Origin reflete apenas seu domínio esperado, nunca um valor dinâmico baseado no header Origin.

Qual é a diferença entre CORS e CSP?

CORS controla quem pode ler respostas de suas APIs. CSP controla quais recursos (scripts, iframes, imagens) seu próprio site pode carregar. São mecanismos complementares: um CORS fraco pode anular os benefícios de um CSP bem configurado, especialmente em ataques de XSS.

Fontes

Avalie este artigo:
Compartilhar:
Categoria
CEVIU Web Dev
Publicado
22 de junho de 2026
Editoria
CEVIU Web Dev

Quer receber mais sobre CEVIU Web Dev?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser