CVE-2026-43912Vaultwarden 是一个用 Rust 编写的 Bitwarden 兼容服务器。在 1.35.5 版本之前,该软件存在严重的访问控制漏洞。系统未能强制执行 `groups_users` 和 `collections_groups` 表中条目的组织归属一致性检查。具体而言,多个群组管理端点接受任意的成员 ID 和集合 ID,并在未验证组织一致性的情况下直接持久化存储。这允许攻击者利用其在组织 A 的管理员权限,将自己在组织 B 中的成员身份 UUID 绑定到组织 A 的群组中。通过这种跨组织的群组关联,攻击者可以绕过权限验证,未经授权地访问组织 B 的保管库数据,甚至获取对组织 B 项目的写入权限。
该漏洞的核心原理在于 Vaultwarden 后端在处理群组与用户、群组与集合的关联请求时,缺乏对组织上下文的严格校验。正常情况下,`groups_users` 表中的记录应确保用户所属的组织与群组所属的组织一致,但在受影响版本中,服务器仅验证了攻击者是否对目标群组(在组织 A 中)拥有管理权限,而未验证被添加的用户 ID 是否属于同一组织。
利用链如下:
1. **跨组织绑定**:攻击者在组织 A 中拥有管理员角色,同时在组织 B 中拥有普通成员角色。攻击者通过 API 调用(如群组用户管理接口),将自己在组织 B 中的 `Membership UUID` 添加到组织 A 的某个群组中。由于未校验 `users_organizations_uuid` 与 `groups_uuid` 的归属关系,该非法绑定被成功写入数据库。
2. **权限继承与数据泄露**:如果组织 A 中的该群组被配置了 `accessAll=true`(拥有全部访问权限),则该群组内的所有成员(包括被非法绑定的外部成员)都将继承这一高权限。当攻击者调用 `/api/sync` 或 `/api/ciphers` 接口时,系统根据群组权限误认为攻击者有权访问组织 B 的数据,从而返回组织 B 的所有密码条目和元数据。
3. **写入权限获取**:攻击者分析泄露的数据,提取出组织 B 的 `Collection UUID`。随后,利用同样的漏洞(`collections_groups` 表缺乏校验),将这些集合 ID 绑定到组织 A 的群组中。这使得攻击者能够对组织 B 的密码库项目执行修改、删除等写入操作,彻底攻破目标组织的数据安全。