发生了什么
2026 年 10 月 8 日 01:12 UTC,面向 AI 智能体的无服务器沙箱平台 SDK——npm 包 tensorlake 的 0.5.144 版本被发布,其中带有窃取凭证的 Shai-Hulud 家族蠕虫。该包每周下载量约 1.2 万至 1.8 万次。据维护者公告,该版本在线约 1 小时 40 分钟,遥测未显示有人使用。Socket 在发布 11 分钟 后就标记了该恶意版本。
据已发布的分析,Tensorlake 在 PyPI 和 Cargo 上的包未受影响。
如何入侵
攻击并非始于 npm,而是始于 GitHub:
- 10 月 7 日,攻击者使用 一名维护者的管理员账户,通过网页界面 直接向 tensorlakeai/tensorlake 的 main 分支提交,没有拉取请求。
- 八次提交调整了载荷,并在 package.json 中加入 preinstall 钩子。
- 约 20 小时后,同一账户手动触发了 官方发布工作流。
结果,该包带着 有效的来源证明(provenance) 发布。正如 StepSecurity 所说,来源证明说明的是包 在哪里 构建,而不是代码是否安全。
恶意软件做了什么
- preinstall 钩子运行一个混淆的加载器,下载 Bun 运行时并执行 856 KB 的载荷。
- 窃取 npm 与 GitHub 令牌,云、Kubernetes 与 Vault 凭证,以及 AI 编程工具的配置文件。
- 尝试 自我传播:重新发布用户的其他包,并以伪造作者"claude@users.noreply.github.com"和提交信息"chore: update dependencies"向其仓库提交 .claude 和 .vscode 文件。
- 人质令牌: 安装一个监控程序,在最长 24 小时内每 60 秒检查一次被盗的 GitHub 令牌。一旦令牌被吊销,就删除主目录(Linux 和 macOS 上执行 rm -rf ~/)。研究人员对陷阱何时触发存在分歧。
这种双文件模式(setup.mjs 与 Math_Symbol.js)与 8 月针对 keyv 和 cacheable 包的攻击相同,均基于 TeamPCP 组织公开的"mini Shai-Hulud"代码。目前没有证据表明是同一团伙。
如果您安装了它
- 在吊销令牌之前先隔离机器,并结束监控进程,以免主目录被删。
- 将机器上的所有凭证视为已泄露:npm、GitHub、云和 AI 智能体配置,然后全部轮换。
- 检查仓库中是否有陌生作者的"chore: update dependencies"提交和新增的工作流。
- 检查您自己的包最近发布的版本。
教训
- 对所有推送到 main 的操作强制审查,包括管理员。
- 维护者账户使用 硬件密钥(FIDO2)。
- 设置 冷却期,不立即安装刚发布的版本,并尽可能禁用安装脚本。
- AI 编程工具已成为攻击目标:它们的配置中保存着高价值密钥。
来源
- Tensorlake 安全公告(GHSA-8g63-53c9-65j2): https://github.com/tensorlakeai/tensorlake/security/advisories/GHSA-8g63-53c9-65j2
- Socket: https://www.socket.dev/blog/tensorlake-compromise
- StepSecurity: https://www.stepsecurity.io/blog/tensorlake-npm-compromised-hostage-token-worm
- Aikido: https://www.aikido.dev/blog/tensorlake-npm-package-compromised
想保护您的软件供应链与流水线吗?KGA IT 提供免费咨询:kga-it.com