Laboratorio + writeup per CVE-2026-44166: Pre-dirottamento dell'account OAuth2 di PocketBase tramite createData.email non convalidato
Una raccolta di autenticazione di PocketBase con OAuth2 abilitato permette al client di passare un oggetto createData quando si registra. L'email all'interno di createData non viene mai confrontata con l'email verificata dal provider OAuth2. Chiunque abbia un account su un provider configurato può registrare un record che contiene l'email di un'altra persona, collegato alla propria identità OAuth2.
Con un solo provider configurato, il vero proprietario viene bloccato. Con due o più provider, il proprietario accede successivamente tramite un provider diverso e finisce per condividere l'account con l'attaccante.
Versione affetta: < 0.22.42 e >= 0.30.0, < 0.37.4. Corretto in 0.22.42 e 0.37.4.
Avviso: GHSA-pq7p-mc74-g65w. CWE-287. CVSS 4.0 6.1.
Analisi completa: 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+, solo libreria standard. Il PoC viene eseguito offline contro un provider OAuth2 mock incluso, quindi non esiste un IdP reale o un target di rete.
Versione vulnerabile 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
Versione corretta 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
| File | Scopo |
|---|---|
WRITEUP.md | Analisi delle cause profonde, entrambe le varianti di attacco, rimedi, rilevamento |
fetch_binaries.py | Scarica i binari 0.37.3 / 0.37.4 per il tuo OS/arch |
mock_oauth2_server.py | Piccolo provider OAuth2 mock offline (token + userinfo) |
poc.py | L'exploit contro la build vulnerabile |
verify_fix.py | Esegue gli stessi passaggi su qualsiasi build e riporta il risultato |
Solo per scopi educativi e test di sicurezza autorizzati: il proprio laboratorio, macchine CTF e HTB, target di bug bounty in ambito. Il laboratorio è offline e non tocca mai nulla che non esegui tu stesso.