4月22日,一个恶意版本的 Bitwarden 命令行界面以官方软件包名称 @bitwarden/cli@2026.4.0 出现在 npm 上。在长达93分钟的时间里,任何通过 npm 拉取该 CLI 的用户,收到的都是经过后门处理的替代品,而非合法工具。
Bitwarden 检测到此次入侵后,立即下架了该软件包,并发表声明称未发现攻击者访问终端用户保险库数据或入侵生产系统的证据。
安全研究公司 JFrog 分析了该恶意载荷,发现其对 Bitwarden 保险库并无特别兴趣。它针对的是 GitHub 令牌、npm 令牌、SSH 密钥、Shell 历史记录、AWS 凭据、GCP 凭据、Azure 凭据、GitHub Actions 密钥以及 AI 工具配置文件。
这些凭据掌控着团队构建、部署和访问基础设施的方式。
| 目标密钥/数据类型 | 通常存储位置 | 运营层面的重要性 |
|---|---|---|
| GitHub 令牌 | 开发者笔记本电脑、本地配置、CI 环境 | 可用于访问代码库、滥用工作流、列举密钥,并通过自动化进行横向移动 |
| npm 令牌 | 本地配置、发布环境 | 可用于发布恶意软件包或篡改发布流程 |
| SSH 密钥 | 开发者设备、构建主机 | 可开放对服务器、内部代码库和基础设施的访问权限 |
| Shell 历史记录 | 本地设备 | 可暴露粘贴的密钥、命令、内部主机名及工作流详情 |
| AWS 凭据 | 本地配置文件、环境变量、CI 密钥 | 可暴露云工作负载、存储及部署系统 |
| GCP 凭据 | 本地配置文件、环境变量、CI 密钥 | 可暴露云项目、服务及自动化管道 |
| Azure 凭据 | 本地配置文件、环境变量、CI 密钥 | 可暴露云基础设施、身份系统及部署路径 |
| GitHub Actions 密钥 | CI/CD 环境 | 可访问自动化流程、构建输出、部署及下游密钥 |
| AI 工具/配置文件 | 项目目录、本地开发环境 | 可暴露 API 密钥、内部端点、模型设置及相关凭据 |
Bitwarden 服务超过50,000家企业和1,000万用户,其官方文档将 CLI 描述为访问和管理保险库的"功能强大、完整全面"的方式,包括在使用环境变量进行身份验证的自动化工作流中。
Bitwarden 将 npm 列为已熟悉该注册表的用户最简便、最优先的安装方式。自动化使用、开发者设备安装与官方 npm 发布三者的结合,使该 CLI 恰好处于高价值基础设施密钥最易聚集之处。
JFrog 的分析显示,该恶意软件包同时重写了 preinstall 钩子和 bw 二进制入口点,将其指向一个加载器,该加载器会获取 Bun 运行时并启动一个经过混淆的载荷。此入侵在安装时和运行时均会触发。
一个组织可能在从未接触任何已存储密码的情况下运行带有后门的 CLI,而恶意软件却系统性地收集着掌控其 CI 管道、云账户和部署自动化的凭据。
安全公司 Socket 表示,此次攻击似乎利用了 Bitwarden CI/CD 管道中一个被入侵的 GitHub Action,与 Checkmarx 研究人员一直追踪的攻击模式相符。
Bitwarden 确认此次事件与 Checkmarx 更大范围的供应链攻击活动相关。
npm 构建其可信发布模型,正是为了应对此类风险。
通过以基于 OIDC 的 CI/CD 身份验证取代长期有效的 npm 发布令牌,该系统消除了攻击者用于劫持注册表发布的最常见路径之一,npm 推荐可信发布,并将其视为一项重要进步。
更难解决的攻击面在于发布逻辑本身,例如调用发布步骤的工作流和 Action。npm 自身的文档建议采取超越 OIDC 的额外管控措施,例如需要手动审批的部署环境、标签保护规则以及分支限制。
| 信任链层级 | 预期保障内容 | 仍可能出错之处 |
|---|---|---|
| 源代码库 | 预期代码库存在于指定仓库中 | 攻击者可能根本无需直接修改主代码库 |
| CI/CD 工作流 | 自动化完成从代码库的构建和发布 | 若被入侵,可生成并发布恶意制品 |
| GitHub Actions/发布逻辑 | 执行构建和发布软件的步骤 | 被污染的 Action 或被滥用的工作流可将合法发布路径变为恶意 |
| OIDC 可信发布 | 以短期身份验证取代长期注册表令牌 | 仅证明授权工作流发布了该软件包,并不证明工作流本身是安全的 |
| npm 官方软件包渠道 | 以预期软件包名称分发软件 | 若官方发布路径被入侵,用户仍可能收到恶意软件 |
| 开发者设备/CI 运行器 | 使用官方软件包 | 安装时或运行时的恶意软件可窃取本地、云端及自动化密钥 |
GitHub 的环境设置允许组织要求审核人员在工作流部署前进行签字确认。SLSA 框架更进一步,要求使用者验证来源信息是否与预期参数匹配,例如正确的代码库、分支、标签、工作流和构建配置。
Bitwarden 事件表明,更难解决的问题存在于工作流层面。若攻击者能够利用发布工作流本身,"官方"标识仍会随恶意软件包一同附上。
可信发布将信任负担向上转移至调用它的工作流和 Action 的完整性,而这一层面在很大程度上是组织尚未审查的盲区。
对于开发者和基础设施团队而言,被入侵的发布工作流会暴露 CI 管道、自动化基础设施以及掌控它们的凭据。
JFrog 的分析显示,一旦恶意软件获取了 GitHub 令牌,便可验证该令牌、枚举可写代码库、列举 GitHub Actions 密钥、创建分支、提交工作流、等待其执行、下载生成的制品,然后清除痕迹。
获取令牌会触发一条自动化链,将单个被盗凭据转化为对整个组织自动化基础设施的持久访问权限。
安装了被污染官方软件包的开发者笔记本电脑,将成为从主机本地凭据存储到 GitHub 访问权限乃至该 GitHub 令牌所能触达的一切资源之间的跳板。
Bybit 事件是一个结构上高度相似的类比。一台被入侵的开发者工作站让攻击者污染了一个受信任的上游界面,进而触及受害者的操作流程。
区别在于,Bybit 涉及被篡改的 Safe Web 界面,而 Bitwarden 涉及被篡改的官方 npm 软件包。
在加密、金融科技或托管环境中,该路径可从凭据存储延伸至发布签名者、云访问权限和部署系统,而无需接触任何保险库条目。
在60天内,Checkmarx 披露了被入侵的 GitHub Actions 工作流和 OpenVSX 插件,云安全联盟警告 TeamPCP 攻击活动正在主动入侵开源项目和 CI/CD 自动化组件。
JFrog 记录了一个被入侵的 Trivy GitHub Action 如何窃取 LiteLLM 的发布令牌并启用恶意 PyPI 发布,Axios 披露了两个恶意 npm 版本通过一个被入侵的维护者账户流通了约三小时。
Sonatype 统计显示,仅2025年就新增逾454,600个恶意软件包,累计总量超过120万个。Bitwarden 加入了一系列事件的行列,证实发布工作流和软件包注册表是主要攻击面。
| 日期/时间段 | 事件 | 被入侵的信任点 | 重要性 |
|---|---|---|---|
| 2026年3月23日 | Checkmarx 披露被入侵的 GitHub Actions 工作流和 OpenVSX 插件 | GitHub Actions 工作流、开发者工具分发 | 显示攻击者针对上游自动化和受信任工具渠道发起攻击 |
| 同一攻击活动窗口期内 | JFrog 记录的 Trivy/LiteLLM 攻击链 | 被入侵的 GitHub Action 导致令牌被盗及恶意 PyPI 发布 | 展示了一个被污染的自动化组件如何级联引发软件包发布滥用 |
| 2026年3月31日 | Axios 恶意 npm 版本事件 | 被入侵的维护者账户 | 显示官方软件包名称可通过账户级别入侵成为攻击载体 |
| 2026年4月22日 | Bitwarden CLI 恶意 npm 发布 | 安全工具的官方 npm 发布路径 | 显示受信任的软件包可在不接触保险库内容的情况下暴露基础设施密钥 |
| 2025年全年 | Sonatype 恶意软件包统计 | 开源软件包生态系统整体 | 表明恶意软件包活动的规模,以及注册表信任为何已成为战略性风险 |
确切的根本原因尚未公开,Bitwarden 已确认与 Checkmarx 攻击活动存在关联,但尚未发布攻击者如何获取发布管道访问权限的详细说明。
对防御者而言,此次事件最重要的意义在于加速重新定义"官方"的含义。
目前,可信发布为每个已发布软件包附加来源数据,从而在注册表中确认发布者身份。SLSA 明确记录了更高标准,要求验证者检查来源信息是否与预期代码库、分支、工作流及构建参数匹配。
若该标准成为用户的默认行为,"官方"将开始意味着"由正确的工作流在正确的约束条件下构建",而入侵了某个 Action 但无法满足所有来源约束的攻击者,其生成的软件包将在落地前就被自动化用户拒绝。
更可能出现的近期走向恰恰相反。攻击者已在60天内通过至少4起事件证明,利用发布工作流、Action 依赖项和维护者相关凭据可以以相对较低的代价获取高价值成果。
每一起后续事件都为公开的攻击手册增添了新的记录技术,包括 Action 入侵、从 CI 输出窃取令牌、维护者账户劫持以及可信发布路径滥用。
除非来源验证成为用户的默认行为而非可选的策略层,否则官方软件包名称所获得的信任将超过其发布流程所能证明的安全程度。
本文最初发表于 CryptoSlate:《93分钟内,安装 Bitwarden"官方"CLI 将笔记本电脑变成劫持 GitHub 账户的跳板》。


