
Exploit prova di concetto per CVE-2026-49757 che dimostra il takeover di account OAuth2/OIDC tramite matching utente basato su email in AshAuthentication, con simulazioni di handler vulnerabile e corretto.
Proof of Concept per CVE-2026-49757 — una vulnerabilità critica in AshAuthentication in cui i callback OAuth2/OIDC risolvevano gli account utente locali tramite indirizzo email invece della coppia identità (strategy, sub), consentendo l'acquisizione di account senza autenticazione.
| Campo | Valore |
|---|---|
| CVE | CVE-2026-49757 |
| CVSS 4.0 | 9.2 (Critico) |
| CWE | CWE-290 (Bypass autenticazione tramite spoofing) |
| GHSA | GHSA-777c-2fxx-qr28 |
| Versione affetta | ash_authentication >= 0.1.0, < 4.14.0 e >= 5.0.0-rc.0, < 5.0.0-rc.10 |
| Corretta | 4.14.0, 5.0.0-rc.10 |
Non sono necessarie le credenziali della vittima. L'attaccante ha bisogno solo dell'indirizzo email della vittima e di un account su qualsiasi provider OAuth accettato dal target.
# Modalità interattiva (consigliata)
python3 exploit.py
# Modalità non interattiva (input tramite pipe)
echo | python3 exploit.py
Simula il IdentityChange.change/3 di AshAuthentication con upsert_identity: :unique_email:
[email protected] (ruolo: admin)google-victim-real-12345)[email protected] (email_verified: false):reject (predefinita)Simula il UserResolver corretto con ricerca per (strategy, sub):
keycloak-attacker-fake-789) non viene trovato in user_identitieson_untrusted_email_match: :reject blocca il login:confirmtrust_email_verified? = trueemail_verified: true → il collegamento automatico riesceemail_verified: false → bloccato| File | Descrizione |
|---|---|
exploit.py | Script PoC principale — esegue tutte e 4 le fasi |
vulnerable_handler.py | Gestori di callback OAuth simulati (vulnerabile + corretto) |
UserResolver — risolve gli utenti per identità (strategy, sub) invece che per emailon_untrusted_email_match — :reject (predefinita), :confirm o :warn per sub sconosciutitrust_email_verified? — flag per provider, predefinito true per GitHub/Google/Auth0/Slack/Apple(strategy, uid, user_id) a (strategy, uid)user_id non viene mai aggiornato in caso di conflittoidentity_resourceQuesto PoC è solo a scopo educativo e di test difensivo. Esegui test solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione.