
Labor + Bericht für CVE-2026-44166: PocketBase OAuth2-Konto-Pre-Hijacking über unvalidiertes createData.email
Eine PocketBase-Auth-Collection mit aktiviertem OAuth2 erlaubt es dem Client, beim Registrieren ein createData-Objekt zu übergeben. Die E-Mail-Adresse in createData wird nie mit der vom OAuth2-Anbieter verifizierten E-Mail abgeglichen. Jeder, der ein Konto bei einem konfigurierten Anbieter hat, kann einen Datensatz registrieren, der die E-Mail-Adresse eines anderen trägt und mit seiner eigenen OAuth2-Identität verknüpft ist.
Bei nur einem konfigurierten Anbieter wird der rechtmäßige Besitzer ausgesperrt. Bei zwei oder mehreren meldet sich der Besitzer später über einen anderen Anbieter an und teilt sich das Konto mit dem Angreifer.
Betroffen: < 0.22.42 und >= 0.30.0, < 0.37.4. Behoben in 0.22.42 und 0.37.4.
Hinweis: GHSA-pq7p-mc74-g65w. CWE-287. CVSS 4.0 6.1.
Vollständiger Bericht: 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+, nur Standardbibliothek. Der PoC läuft offline gegen einen eingebetteten Mock-OAuth2-Anbieter, es gibt also keinen echten IdP oder Netzwerkziel.
Verwundbare Version 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
Gefixte Version 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
Für Bildung und autorisierte Sicherheitstests: dein eigenes Labor, CTF- und HTB-Boxen, Bug-Bounty-Ziele innerhalb des Gültigkeitsbereichs. Das Labor ist offline und berührt niemals etwas, das du nicht selbst ausführst.
| Datei | Zweck |
|---|
WRITEUP.md | Ursachenanalyse, beide Angriffsvarianten, Abhilfe, Erkennung |
fetch_binaries.py | Lädt die Binärdateien 0.37.3 / 0.37.4 für dein Betriebssystem/deine Architektur herunter |
mock_oauth2_server.py | Kleiner offline Mock-OAuth2-Anbieter (Token + Benutzerinfo) |
poc.py | Der Exploit gegen die verwundbare Version |
verify_fix.py | Führt die gleichen Schritte auf jeder Version aus und meldet das Ergebnis |