← Base de Vulnerabilidades
Autorização A07:2021-Identification and Authentication Failures CVSS 8.1

OAuth2 — Falhas em Fluxos de Autorização

Implementações OAuth2 vulneráveis permitem roubo de authorization codes. Veja redirect_uri bypass, ausência de state parameter e PKCE downgrade com exemplos.

Comum em: Login social (Google, GitHub), SSO corporativo, integrações com terceiros · Dificuldade: Média — requer compreensão do fluxo OAuth

O Que É OAuth2

OAuth2 é o protocolo padrão de autorização em aplicações modernas, mas implementações incorretas criam vetores sérios de ataque. Falhas comuns: (1) redirect_uri não validado — autorização pode ser redirecionada para domínio do atacante; (2) Ausência de state parameter — permite CSRF no fluxo OAuth; (3) PKCE downgrade — remoção de code_challenge aceita sem verificação; (4) Token leakage — access_token exposto em URL, logs ou Referer header.

Exemplo Real de Ataque

HTTP Request / Response
# redirect_uri bypass via wildcard insuficiente
GET /oauth/authorize
  ?client_id=app123
  &redirect_uri=https://app.empresa.com.br.attacker.com/callback
  &response_type=code
  &scope=openid+profile+email
  &state=IGNORED

# Servidor valida apenas prefixo "https://app.empresa.com" → ✓ aceita!
# Authorization code entregue para attacker.com

Impacto no Negócio e Compliance

Roubo de authorization code → impersonação de qualquer conta. Em integrações com Google/GitHub/SSO corporativo, um redirect_uri bypass permite assumir contas de usuários sem senha. Para aplicações com OAuth de terceiros (bancárias, de pagamento), o impacto é financeiro direto.

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

Como Remediar

# ✅ REMEDIAÇÃO: Validação exata de redirect_uri
ALLOWED_REDIRECT_URIS = {
    "https://app.empresa.com.br/callback",
    "https://app.empresa.com.br/auth/callback"
}

def validate_redirect_uri(uri: str) -> bool:
    # NUNCA use startswith() ou contains() — use exact match
    return uri in ALLOWED_REDIRECT_URIS

# ✅ State parameter obrigatório e verificado
import secrets
state = secrets.token_urlsafe(32)
session["oauth_state"] = state
# Na callback: assert request.args["state"] == session["oauth_state"]

Como a Veyronn Detecta Esta Vulnerabilidade

Testamos redirect_uri bypass (subdomínio, path traversal, query string), ausência e previsibilidade de state, PKCE downgrade, e token leakage em headers e logs. Mapeamos todos os providers OAuth configurados.

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.