突发:知名密码管理器BitwardenCLI遭供应链投毒

admin 2026-04-24 04:50:49 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: JFrog安全团队披露BitwardenCLI遭供应链投毒,攻击者发布恶意版本2026.4.0,通过预安装脚本和Bun运行时窃取SSH、云凭证及AI工具配置,并滥用GitHubtoken进行二次攻击。文档提供了攻击链路、IOC及检测命令,建议用户检查版本并扫描相关痕迹。 综合评分: 85 文章分类: 供应链安全,漏洞预警,恶意软件,安全工具,威胁情报


cover_image

突发:知名密码管理器Bitwarden CLI遭供应链投毒

原创

玄月调查小组 玄月调查小组

玄月调查小组

2026年4月24日 00:08 上海 标题已修改

在小说阅读器读本章

去阅读

2026 年 4 月 23 日,JFrog 安全研究团队发布预警,披露 TeamPCP对Bitwarden CLI的最新供应链攻击。攻击者在 npm 发布了 @bitwarden/cli 2026.4.0 恶意包。

攻击链路拆解

投毒版本完整保留了Bitwarden CLI 的品牌标识与仓库元数据,

但修改了包执行路径, 使 npm 运行恶意加载器。

只要执行了这个版本的安装命令,npm就会自动执行preinstall恶意脚本

{
    "scripts": {
        "preinstall": "node bw_setup.js"
    },
    "bin": {
        "bw": "bw_setup.js"
    }
}

目前 2026.4.0版本已经被npm删除

触发机制

加载器 bw_setup.js 首先脚本会先检测本地环境是否安装 Bun,

若未安装则从 GitHub 官方仓库下载对应平台的 Bun 安装包,

完成解压与权限配置后,

通过 Bun 执行核心恶意载荷 bw1.js。

const BUN_VERSION = "1.3.13";
const downloadUrl = `https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/${assetName}`;
...
if (!isWin) fs.chmodSync(binPath, 0o755);
execFileSync(binPath, ["bw1.js"], { stdio: "inherit" });

这一设计既摆脱了对受害者本地 Node.js 环境的依赖,也脱离了常规 npm 包的执行路径,提升了杀软的绕过概率。

凭据收集

除了常规木马都会瞄准的SSH密钥、历史记录、AWS/GCP/Azure三大云的密钥,甚至还专门加入了对AI开发工具配置文件的抓取。

| 类别 | 路径/模式 | | — | — | | SSH | ~/.ssh/id_~/.ssh/id*~/.ssh/known_hosts~/.ssh/keys | | Git | .git/config.git-credentials | | npm | ~/.npmrc.npmrc | | 通用密钥 | .env | | 历史记录 | ~/.bash_history~/.zsh_history | | AWS | ~/.aws/credentials | | GCP | ~/.config/gcloud/credentials.db | | AI / MCP | ~/.claude.json.claude.json~/.claude/mcp.json~/.kiro/settings/mcp.json.kiro/settings/mcp.json |

注意最后一行,针对 Claude 和 Kiro 的配置文件

当然也包括供应链攻击最爱的GitHub和npm token

GitHub:ghp_... 和 gho_...
npm:npm_...

不止偷你的数据,也偷你公司的

有同学该说了:不就是偷个本地凭证吗?至于这么紧张? 那你太小看这套攻击体系了。 它不止窃取GitHub token,更是直接把偷来的token武器化,完成二次渗透。

token有效性校验

它会先通过 https://api.github.com/user 接口,对窃取到的 GitHub token进行有效性核验;核验通过后,会启动三条基于 GitHub 平台的权限升级与攻击兜底链路。

三条核心 GitHub 攻击链路

| 攻击链路 | 具体执行行为 | 硬编码关键配置 | | — | — | — | | 提交记录搜索获取备用 PAT | 向 GitHub 提交搜索接口发起查询,从匹配到的提交信息中,提取经双层 Base64 编码的备用个人访问token(PAT) | 请求地址:https://api.github.com/search/commits?q=LongLiveTheResistanceAgainstMachines&sort=author-date&order=desc&per_page=50 | | 签名提交记录发现备用外泄域名 | 若主数据外泄域名访问失败,会搜索 GitHub 中以beautifulcastle开头的提交信息,通过内置 RSA 公钥完成签名校验后,解析出备用的外泄域名 | 匹配正则:/beautifulcastle ([A-Za-z0-9+/=]{1,30})\.([A-Za-z0-9+/=]{1,700})/;请求地址模板:https://api.github.com/search/commits?q=" + encodeURIComponent(query) + "&sort=author-date&order=desc | | 仓库兜底数据外泄 | 拿到可用 PAT 后,直接在受害者 GitHub 账号下创建仓库,在results/目录下上传加密后的 JSON 格式窃密数据 | |

恶意滥用GitHub Actions

获取有效token后,还会进一步滥用 GitHub Actions 功能:

  1. 枚举token拥有写入权限的所有代码仓库

  2. 拉取仓库内的 Actions 密钥清单

  3. 创建临时分支,提交恶意工作流文件

  4. 等待工作流执行完成,下载生成的机密产物

  5. 执行完毕后删除临时分支与工作流运行记录,销毁攻击痕迹

两套数据泄露通道

该攻击活动的另一大特点,是设计了主备双外泄通道,主通道不通就自动切换GitHub兜底,保证数据尽量能回传到攻击者手中。

主通道: 将所有窃取数据用 AES-256-GCM 加密(密钥再用RSA公钥包裹),POST到: hxxps://audit[.]checkmarx[.]cx/v1/telemetry

注:域名伪装成安全公司 Checkmarx 的域名

备用通道,如果直接通过 HTTPS 泄露数据失败,会切换至 GitHub 路径。

抖机灵的TeamPCP?

此前,@pcpcats 账号转发了checkmarx入侵事件的报道,并发布了挑衅性言论:“感谢 OSS 分发,让 PCP 公司又度过了非常成功的一天。”

不过之后该账号被X封禁,没法看到TeamPCP的回复了。

毕竟这次的直接是checkmarx[.]cx

因为bitwarden/cli(每周 7.8 万次下载),所以已经有人在声讨bitwarden了。。。

而bitwarden官方认为生产数据和系统没有被入侵

只安装浏览器插件的同学,也许可以喘口气了?

如何判断是否中招

检查是否安装过问题版本:

npm list -g @bitwarden/cli

如果输出包含  ⁠2026.4.0⁠ ,立即处置。

扫描痕迹:

rg -n "audit\.checkmarx\.cx|LongLiveTheResistanceAgainstMachines|beautifulcastle" .
ls -la bun bun.exe bw1.js bw_setup.js 2>/dev/null

IOC

网络IOC

| 类型 | 值 | 用途 | | — | — | — | | 域名 | audit[.]checkmarx[.]cx | 主要 HTTPS 外泄域名 | | IP | 94[.]154[.]172[.]43 | 域名解析的 IP 地址 | | URL | hxxps[://]audit[.]checkmarx[.]cx/v1/telemetry | 主要外泄路径 | | URL | hxxps[://]api[.]github[.]com/search/commits?q=LongLiveTheResistanceAgainstMachines&sort=author-date&order=desc&per_page=50 | 通过提交搜索获取 PAT | | URL | hxxps[://]api[.]github[.]com/search/commits?q=beautifulcastle%20&sort=author-date&order=desc | 回退域名发现模式 | | URL | hxxps[://]github[.]com/oven-sh/bun/releases/download/bun-v1.3.13/<asset>.zip | 运行时引导下载 |

包和文件IOC

| 类型 | 值 | | — | — | | 包 | @bitwarden/cli | | 恶意版本 | 2026.4.0 | | 加载器文件 | bw_setup.js | | Payload 文件 | bw1.js | | 加载器 SHA-256 | 8605e365edf11160aad517c7d79a3b26b62290e5072ef97b102a01ddbb343f14 | | Payload SHA-256 | 8605e365edf11160aad517c7d79a3b26b62290e5072ef97b102a01ddbb343f14 | | 篡改后的根元数据 SHA-256 | 8605e365edf11160aad517c7d79a3b26b62290e5072ef97b102a01ddbb343f14 |

最后

对于安全行业来说,

Trivy、Checkmarx还没止血,

Bitwarden又补了一刀。

对于饱受AI冲击的安全行业来说, 大家觉得到底是好是坏呢?

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章,我们,下次再见。

参考资料: https://research.jfrog.com/post/bitwarden-cli-hijack/

https://github.com/bitwarden/clients/issues/20353

https://community.bitwarden.com/t/bitwarden-statement-on-checkmarx-supply-chain-incident/96127


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:玄月调查小组 玄月调查小组 玄月调查小组《突发:知名密码管理器Bitwarden CLI遭供应链投毒》

评论:0   参与:  0