Lab + rapport pour CVE-2026-44166 : pré-détournement de compte OAuth2 de PocketBase via un createData.email non validé
Une collection d'authentification PocketBase avec OAuth2 activé permet au client de passer un objet createData lors de l'inscription. L'email dans createData n'est jamais vérifié par rapport à l'email que le fournisseur OAuth2 a vérifié. Toute personne possédant un compte sur un fournisseur configuré peut enregistrer un enregistrement qui porte l'email de quelqu'un d'autre, lié à sa propre identité OAuth2.
Avec un seul fournisseur configuré, le véritable propriétaire est bloqué. Avec deux ou plus, le propriétaire se connecte plus tard via un autre fournisseur et finit par partager le compte avec l'attaquant.
Versions concernées : < 0.22.42 et >= 0.30.0, < 0.37.4. Corrigé dans 0.22.42 et 0.37.4.
Avis : GHSA-pq7p-mc74-g65w. CWE-287. CVSS 4.0 6.1.
Analyse complète : WRITEUP.md
python fetch_binaries.py # pulls vulnerable 0.37.3 + patched 0.37.4 for your OS
python poc.py # pre-claim and lockout against the vulnerable build
python verify_fix.py 0.37.4 # same steps on the patched build, attacker gets evicted
Python 3.8+, bibliothèque standard uniquement. Le PoC s'exécute hors ligne contre un fournisseur OAuth2 simulé intégré, donc il n'y a pas de véritable IdP ni de cible réseau.
Vulnérable 0.37.3 :
[1] Attacker token issued for: [email protected] (verified=False)
[2] Victim login: HTTP 400 -- Failed to authenticate.
[3] Attacker re-auth: [email protected] -- same record: True
Corrigé 0.37.4 :
[1] Attacker pre-claims: [email protected] verified=False id=...
[2] Victim login: SUCCESS verified=True id=... => victim owns the account
[3] Attacker re-auth: [email protected] id=... same-as-victim=False
| Fichier | Objectif |
|---|---|
WRITEUP.md | Analyse des causes racines, des deux variantes d'attaque, remédiation, détection |
fetch_binaries.py | Télécharge les binaires 0.37.3 / 0.37.4 pour votre OS/architecture |
mock_oauth2_server.py | Petit fournisseur OAuth2 simulé hors ligne (jeton + infos utilisateur) |
poc.py | L'exploit contre la version vulnérable |
verify_fix.py | Exécute les mêmes étapes sur n'importe quelle version et rapporte le résultat |
Pour l'éducation et les tests de sécurité autorisés : votre propre laboratoire, les boîtes CTF et HTB, les cibles de bug bounty dans le périmètre. Le laboratoire est hors ligne et ne touche jamais rien que vous n'exécutez pas vous-même.