
Laboratório + relatório para CVE-2026-44166: Pré-sequestro de conta OAuth2 do PocketBase através de createData.email não validado
Uma coleção de autenticação do PocketBase com OAuth2 ativado permite que o cliente passe um objeto createData ao se cadastrar. O e-mail dentro de createData nunca é verificado em relação ao e-mail que o provedor OAuth2 confirmou. Qualquer pessoa com uma conta em um provedor configurado pode registrar um registro que carrega o e-mail de outra pessoa, vinculado à sua própria identidade OAuth2.
Com um provedor configurado, o verdadeiro proprietário fica bloqueado. Com dois ou mais, o proprietário faz login posteriormente através de um provedor diferente e acaba compartilhando a conta com o atacante.
Afetados: < 0.22.42 e >= 0.30.0, < 0.37.4. Corrigido em 0.22.42 e 0.37.4.
Aviso: GHSA-pq7p-mc74-g65w. CWE-287. CVSS 4.0 6.1.
Relatório completo: 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+, apenas biblioteca padrão. O PoC executa offline contra um provedor OAuth2 simulado incluído, portanto não há IdP real ou alvo de rede.
Vulnerável 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
Corrigido 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
Apenas para educação e testes de segurança autorizados: seu próprio laboratório, máquinas CTF e HTB, alvos de bug bounty dentro do escopo. O laboratório é offline e nunca toca em nada que você mesmo não execute.
| Arquivo | Propósito |
|---|
WRITEUP.md | Análise da causa raiz, ambas as variantes de ataque, remediação, detecção |
fetch_binaries.py | Baixa os binários 0.37.3 / 0.37.4 para seu SO/arquitetura |
mock_oauth2_server.py | Pequeno provedor OAuth2 simulado offline (token + userinfo) |
poc.py | O exploit contra a build vulnerável |
verify_fix.py | Executa os mesmos passos em qualquer build e relata o resultado |