CVE-2026-31835Vaultwarden是一款用Rust编写的Bitwarden兼容服务器。在1.35.4及更早版本中,WebAuthn认证流程的`validate_webauthn_login()`函数存在严重逻辑缺陷。该函数在执行签名验证之前,错误地根据未经验证的`authenticatorData`更新了数据库中的持久化元数据(即`backup_eligible`和`backup_state`标志)。由于签名验证失败后系统不会回滚数据库更新,这使得知道用户密码但无法提供有效WebAuthn签名的攻击者,能够永久篡改该用户凭据的备份标志,从而导致受影响凭据的WebAuthn双因素认证功能出现持续拒绝服务。
该漏洞的核心在于Vaultwarden处理WebAuthn登录请求时的时序逻辑错误。根据安全最佳实践,涉及持久化状态更改的操作必须在验证数据完整性(如签名验证)之后进行。然而,受影响版本的代码在`validate_webauthn_login()`中,优先解析了客户端传入的`authenticatorData`,并直接将其中的标志位写入数据库。随后代码才执行签名验证步骤。如果验证失败(例如攻击者提供的签名无效),虽然登录请求被拒绝,但之前的数据库写入操作已经生效且未触发事务回滚。攻击者利用此漏洞,只需掌握用户主密码,即可构造包含恶意`authenticatorData`(篡改了备份标志)和无效签名的请求。这将导致合法的WebAuthn硬件密钥因服务端存储的标志位与实际物理凭证不匹配而失效,实现对特定账户WebAuthn 2FA的持久化拒绝服务攻击。