
Exploit de prova de conceito para CVE-2026-49757 demonstrando apropriação de conta OAuth2/OIDC por meio de correspondência de usuários baseada em e-mail no AshAuthentication, com simulações de handlers vulnerável e corrigido.
Proof of Concept para CVE-2026-49757 — uma vulnerabilidade crítica no AshAuthentication em que callbacks OAuth2/OIDC resolviam contas de usuário locais pelo endereço de e-mail em vez do par de identidade (strategy, sub), permitindo tomada de conta sem autenticação.
| Campo | Valor |
|---|---|
| CVE | CVE-2026-49757 |
| CVSS 4.0 | 9.2 (Crítico) |
| CWE | CWE-290 (Authentication Bypass by Spoofing) |
| GHSA | GHSA-777c-2fxx-qr28 |
| Afetados | ash_authentication >= 0.1.0, < 4.14.0 e >= 5.0.0-rc.0, < 5.0.0-rc.10 |
| Corrigido | 4.14.0, 5.0.0-rc.10 |
Nenhuma credencial da vítima é necessária. O atacante precisa apenas do endereço de e-mail da vítima e de uma conta em qualquer provedor OAuth aceito pelo destino.
# Modo interativo (recomendado)
python3 exploit.py
# Modo não interativo (entrada via pipe)
echo | python3 exploit.py
Simula o IdentityChange.change/3 do AshAuthentication com upsert_identity: :unique_email:
[email protected] (função: admin)google-victim-real-12345)[email protected] (email_verified: false):reject (padrão)Simula o UserResolver corrigido com busca por (strategy, sub):
keycloak-attacker-fake-789) não é encontrado em user_identitieson_untrusted_email_match: :reject bloqueia o login:confirmtrust_email_verified? = trueemail_verified: true → o vínculo automático é bem-sucedidoemail_verified: false → bloqueado| Arquivo | Descrição |
|---|---|
exploit.py | Script principal do PoC — executa as 4 fases |
vulnerable_handler.py | Handlers de callback OAuth simulados (vulnerável + corrigido) |
UserResolver — resolve usuários pela identidade (strategy, sub) em vez do e-mailon_untrusted_email_match — :reject (padrão), :confirm ou :warn para subs desconhecidostrust_email_verified? — flag por provedor, padrão true para GitHub/Google/Auth0/Slack/Apple(strategy, uid, user_id) para (strategy, uid)user_id nunca é atualizado em conflitoidentity_resourceEste PoC destina-se apenas a fins educacionais e de testes defensivos. Teste apenas contra sistemas que você possui ou para os quais tenha autorização explícita para testar.