
Exploit de prueba de concepto para CVE-2026-49757 que demuestra la toma de control de cuentas OAuth2/OIDC mediante la coincidencia de usuarios basada en correo electrónico en AshAuthentication, con simulaciones de manejadores vulnerables y corregidos.
Prueba de concepto para CVE-2026-49757 — una vulnerabilidad crítica en AshAuthentication donde los callbacks OAuth2/OIDC resolvían las cuentas de usuario locales por dirección de correo electrónico en lugar del par de identidad (strategy, sub), lo que permitía la toma de control de cuentas sin autenticación.
| Campo | Valor |
|---|---|
| CVE | CVE-2026-49757 |
| CVSS 4.0 | 9.2 (Crítica) |
| CWE | CWE-290 (Omisión de autenticación por suplantación) |
| GHSA | GHSA-777c-2fxx-qr28 |
| Afectado | ash_authentication >= 0.1.0, < 4.14.0 y >= 5.0.0-rc.0, < 5.0.0-rc.10 |
| Corregido | 4.14.0, 5.0.0-rc.10 |
No se necesitan credenciales de la víctima. El atacante solo necesita la dirección de correo electrónico de la víctima y una cuenta en cualquier proveedor OAuth que acepte la aplicación objetivo.
# Interactive mode (recommended)
python3 exploit.py
# Non-interactive mode (piped input)
echo | python3 exploit.py
Simula el IdentityChange.change/3 de AshAuthentication con upsert_identity: :unique_email:
[email protected] (rol: admin)google-victim-real-12345)[email protected] (email_verified: false):reject (predeterminada)Simula el UserResolver corregido con la búsqueda por (strategy, sub):
keycloak-attacker-fake-789) no se encuentra en user_identitieson_untrusted_email_match: :reject bloquea el inicio de sesión:confirmtrust_email_verified? = trueemail_verified: true → la vinculación automática se realiza correctamenteemail_verified: false → bloqueado| Archivo | Descripción |
|---|---|
exploit.py | Script principal del PoC — ejecuta las 4 fases |
vulnerable_handler.py | Manejadores de callbacks OAuth simulados (vulnerable + corregido) |
UserResolver — resuelve los usuarios por la identidad (strategy, sub) en lugar del correo electrónicoon_untrusted_email_match — :reject (predeterminada), :confirm o :warn para subs desconocidostrust_email_verified? — indicador por proveedor, predeterminado a true para GitHub/Google/Auth0/Slack/Apple(strategy, uid, user_id) a (strategy, uid)user_id nunca se actualiza en caso de conflictoidentity_resourceEste PoC es únicamente para fines educativos y de pruebas defensivas. Prueba solo contra sistemas que poseas o para los que tengas autorización explícita.