
Exploit de preuve de concept pour CVE-2026-49757 démontrant une prise de contrôle de compte OAuth2/OIDC via la correspondance des utilisateurs par e-mail dans AshAuthentication, avec des simulations de gestionnaires vulnérable et corrigé.
Preuve de concept pour CVE-2026-49757 — une vulnérabilité critique dans AshAuthentication où les rappels OAuth2/OIDC résolvaient les comptes utilisateur locaux par adresse e-mail au lieu de la paire d'identité (strategy, sub), permettant une prise de contrôle de compte sans authentification.
| Champ | Valeur |
|---|
| CVE | CVE-2026-49757 |
| CVSS 4.0 | 9.2 (Critique) |
| CWE | CWE-290 (Contournement de l'authentification par usurpation) |
| GHSA | GHSA-777c-2fxx-qr28 |
| Affecté | ash_authentication >= 0.1.0, < 4.14.0 et >= 5.0.0-rc.0, < 5.0.0-rc.10 |
| Corrigé | 4.14.0, 5.0.0-rc.10 |
Aucun identifiant de la victime n'est nécessaire. L'attaquant n'a besoin que de l'adresse e-mail de la victime et d'un compte sur n'importe quel fournisseur OAuth accepté par la cible.
# Interactive mode (recommended)
python3 exploit.py
# Non-interactive mode (piped input)
echo | python3 exploit.py
Simule le IdentityChange.change/3 d'AshAuthentication avec upsert_identity: :unique_email :
[email protected] (role: admin)google-victim-real-12345)[email protected] (email_verified: false):reject (par défaut)Simule le UserResolver corrigé avec la recherche (strategy, sub) :
keycloak-attacker-fake-789) n'est pas trouvé dans user_identitieson_untrusted_email_match: :reject bloque la connexion:confirmtrust_email_verified? = trueemail_verified: true → la liaison automatique réussitemail_verified: false → bloqué| Fichier | Description |
|---|---|
exploit.py | Script PoC principal — exécute les 4 phases |
vulnerable_handler.py | Gestionnaires de rappel OAuth simulés (vulnérable + corrigé) |
UserResolver — résout les utilisateurs par identité (strategy, sub) au lieu de l'e-mailon_untrusted_email_match — :reject (par défaut), :confirm ou :warn pour les sub inconnustrust_email_verified? — indicateur par fournisseur, défini par défaut à true pour GitHub/Google/Auth0/Slack/Apple(strategy, uid, user_id) à (strategy, uid)user_id n'est jamais mis à jour en cas de conflitidentity_resourceCe PoC est destiné uniquement à des fins éducatives et de tests défensifs. Testez uniquement sur des systèmes dont vous êtes propriétaire ou pour lesquels vous disposez d'une autorisation explicite.