
Proof-of-concept-Exploit für CVE-2026-49757, der die OAuth2/OIDC-Übernahme von Konten durch E-Mail-basiertes Benutzer-Matching in AshAuthentication demonstriert, mit Simulationen von angreifbaren und behobenen Handlern.
Beweis des Konzepts für CVE-2026-49757 — eine kritische Schwachstelle in AshAuthentication, bei der OAuth2/OIDC-Callbacks Benutzerkonten anhand der E-Mail-Adresse anstelle des (Strategie, sub)-Identitätspaars auflösten, was eine nicht authentifizierte Kontenübernahme ermöglichte.
| Feld | Wert |
|---|---|
| CVE | CVE-2026-49757 |
| CVSS 4.0 | 9.2 (Kritisch) |
| CWE | CWE-290 (Authentifizierungsumgehung durch Spoofing) |
| GHSA | GHSA-777c-2fxx-qr28 |
| Betroffen | ash_authentication >= 0.1.0, < 4.14.0 und >= 5.0.0-rc.0, < 5.0.0-rc.10 |
| Gefixt | 4.14.0, 5.0.0-rc.10 |
Es werden keine Anmeldeinformationen des Opfers benötigt. Der Angreifer benötigt lediglich die E-Mail-Adresse des Opfers und ein Konto bei einem beliebigen OAuth-Anbieter, den das Ziel akzeptiert.
# Interaktiver Modus (empfohlen)
python3 exploit.py
# Nicht-interaktiver Modus (gepipter Input)
echo | python3 exploit.py
Simuliert AshAuthentications IdentityChange.change/3 mit upsert_identity: :unique_email:
[email protected] (Rolle: admin)google-victim-real-12345)[email protected] (email_verified: false):reject-Richtlinie (Standard)Simuliert den gepatchten UserResolver mit (Strategie, sub)-Nachschlag:
keycloak-attacker-fake-789) wird in user_identities nicht gefundenon_untrusted_email_match: :reject blockiert den Login:confirm-Richtlinietrust_email_verified? = trueemail_verified: true an → Auto-Verknüpfung erfolgreichemail_verified: false an → blockiert| Datei | Beschreibung |
|---|---|
exploit.py | Haupt-PoC-Skript – führt alle 4 Phasen aus |
vulnerable_handler.py | Simulierte OAuth-Callback-Handler (angreifbar + gefixt) |
UserResolver-Modul – löst Benutzer anhand der (Strategie, sub)-Identität statt per E-Mail aufon_untrusted_email_match-Option – :reject (Standard), :confirm oder :warn für unbekannte substrust_email_verified?-Option – anbieterabhängiges Flag, Standard true für GitHub/Google/Auth0/Slack/Apple(Strategie, uid, user_id) zu (Strategie, uid)user_id wird bei Konflikten nie aktualisiertidentity_resourceDieser PoC dient ausschließlich zu Bildungs- und Abwehrzwecken. Testen Sie nur an Systemen, die Sie besitzen oder für deren Test Sie eine ausdrückliche Genehmigung haben.