Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
bitwarden-cipher-create-acl — Bitwarden Server v2026.9.2 - 高危 - IDOR - 将可解密的保险库项目植入调用者无权写入的集合中 | Kitploit
工具/GitHubGitHub/abraxas/bitwarden-cipher-create-acl
身份验证与授权漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试实验室与实践
GitHubabraxas/bitwarden-cipher-create-acl

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

bitwarden-cipher-create-acl

Bitwarden Server v2026.9.2 - 高危 - IDOR - 将可解密的保险库项目植入调用者无权写入的集合中

查看仓库
11113天前尚未审核

Abraxas Labs - bitwarden-cipher-create-acl

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  bitwarden-cipher-create-acl

bitwarden-cipher-create-acl

Bitwarden Server v2026.9.2 - Bitwarden

在 Entity Framework 路径(MariaDB、Postgres、SQLite)上创建组织密码库条目时,会在附加到集合之前丢弃调用者 id。已确认的成员可以将一个组织密钥条目植入他们无权写入的集合中。集合成员会将其作为普通共享登录项同步。

ID暂无 CVE
CWECWE-863 / CWE-639
CVSS高危:7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L
产品Bitwarden Server
受影响版本v2026.9.2 (9ee4e0eb) lite EF(MariaDB / Postgres / SQLite)。MSSQL/Dapper 保留 @UserId。
认证已确认的组织成员
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1

攻击者能做什么

攻击者向共享集合中添加密码库条目。他们无法读取或替换其中已有的机密。

已确认的组织成员已经拥有组织密钥,因此新条目会对所有能看到该集合的人解密。Bitwarden 会将其显示为公司密码库内的普通共享登录项、笔记、卡片或 SSH 密钥。

  • 从密码库发起钓鱼。 植入一个名称类似真实共享条目(Okta、GitHub、VPN、Payroll)的登录项,其 URI 指向攻击者控制的服务器。集合成员从 Bitwarden 打开它,就会落到攻击者页面,或对仿冒页面自动填充。
  • 污染运维。 植入一个看起来像轮换操作的笔记或登录项(new AWS key、bastion SSH key、DB password after change)。有人会将其复制到生产环境或终端中。
  • 被踢出后仍留存。 该创建操作是集合中的一个新密码库条目。即使攻击者成员身份被移除,它对所有有访问权限的人仍然存在。
  • 绕过只读限制。 只能读取 Production 的承包商在 lite EF 上仍可向其中植入新条目。

如果他们对目标集合没有访问权限,POST /api/ciphers/create 可能在写入已提交后返回 404。受害者仍会在同步时收到该条目。

我是如何发现的

在 2026 年那一波之后,我锁定了 bitwarden/server v2026.9.2(9ee4e0eb):管理员请求 TDE(CVE-2026-60104)、SSO ExternalId 截断(CVE-2026-101878)、组织导入空集合(CVE-2026-43638)。这些都已修复。但创建时的集合 ACL 没有。

CiphersController.PostCreate 只检查组织成员身份,然后在设置了 OrganizationId 时传入 skipPermissionCheck: true。SaveDetailsAsync 随后将“该集合存在于组织中”视为唯一的集合检查。

Lite MariaDB/Postgres/SQLite 使用 EF。CreateAsyncReturnCipher 因为存在组织 id 而设置 cipher.UserId = null,然后将这个 null 传入 UpdateCollectionsAsync。Null 用户 id 意味着组织中的所有集合。SQL Server Dapper 为 Cipher_UpdateCollections 保留 @UserId(ReadOnly = 0)。那条路径是反例。

已记录的弯路:将云端的 POST /organizations 当作自托管创建(它是 [NotSelfHostedOnly];lite 需要许可证文件,因此实验环境在注册后直接播种组织行);植入到调用者无法读取的集合中,并将 HTTP 404 当作失败(CollectionCipher 行已经提交);假设 MSSQL lite 会显示它(Dapper 不会丢弃调用者 id);关闭 BW_ENABLE_ADMIN 导致 lite 从不迁移 User / OrganizationDomain(在此镜像上 admin 是 EF 迁移器);在 /identity/connect/token 上省略 Bitwarden-Client-Version,然后看着密码授权返回 400。一个反弹 shell。纯属表演。

实验环境

cd lab
./run.sh

目标仅为 http://127.0.0.1:18160。镜像 ghcr.io/bitwarden/lite:2026.9.2 加上 MariaDB。

SUCCESS BITWARDEN-CIPHER-CREATE-ACL create-http=404 collectioncipher=1 victim-sync-has-cipher=yes cipher=<id> negative-http=404 readonly-http=200 BITWARDEN-CIPHER-CREATE-ACL-WITNESS

无访问权限的植入在 CollectionCipher 提交后返回 404。受害者的 GET /api/ciphers 和 /api/sync 都包含新 id。对 B 的只读访问返回 200 且仍能植入。外部组织的集合保持 404,且没有连接行。

修复方案

将保存用户 id 传入 EF 的 UpdateCollectionsAsync,就像 CipherDetails_CreateWithCollections 在将存储的 UserId 列置空后仍传递 @UserId 一样。在成员创建路径上,不要将 null 用户视为“所有集合”。存在于组织中并不等于写入权限。

参考资料

  • github.com/bitwarden/server 标签 v2026.9.2
  • CiphersController.cs(Post、PostCreate)
  • CipherService.cs(SaveDetailsAsync)
  • CipherRepository.cs(CreateAsyncReturnCipher、UpdateCollectionsAsync)
  • CWE-863

许可证

GNU Affero GPL v3.0

下载工具