我们 CI 也撞了,入口包是 @
antv/x6 → @
antv/
[email protected] ,optionalDependencies 也指到同一个 antvis/G2 commit 1916faa3 。同一个被劫账号 atool 。所以受牵连的不只 @
antv/g6 那几条链。
没中招是运气好——runner 镜像默认 node:18.20.0 不带 bun ,preinstall 跑 `bun run index.js` 直接 command not found ,install 整体挂掉,payload 没机会跑。如果环境有 bun 估计就和你一样了。
触发条件挺刁:lockfile 是 v9 ( pnpm 9 生成)但 CI 装的是 pnpm@latest-8 ,pnpm 8 看到不兼容直接 ignore ,加 --no-frozen-lockfile ,@antv/x6-geometry 就从锁的 2.0.5 ( 3 年前的合法版)漂到刚发的 2.2.5 。三个条件少一个都不会撞。
safedep 今天发了完整分析:
https://safedep.io/mini-shai-hulud-strikes-again-314-npm-packages-compromised631 个恶意版本跨 314 个包,22 分钟批量发完。
antvis/G2 也有 [SECURITY] issue 了:
https://github.com/antvis/G2/issues/7394那个 `&& exit 1` 挺阴的,payload 跑完凭据偷走才故意让 prepare 报错,让人以为是构建 bug 去查 lockfile ,攻击成功反而藏在 install 失败里。看到 ERR_PNPM_PREPARE_PACKAGE 别只想着 lockfile 。
几个 IoC 摘几条。恶意 index.js 是 ~500KB 单行无换行混淆,
obfuscator.io 风格 hex 变量名。payload SHA256 是 a68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c 。攻击者用偷的 token 创建的 C2 仓库命名是 Dune 词配数字,比如 sardaukar-sandworm-42 这种。CI 环境会被识别,GITHUB_ACTIONS / GITLAB_CI 等 20+ 平台都覆盖,OIDC 会被换成 npm publish token 。
package.json 里加 pnpm overrides 钉版本:
"pnpm": { "overrides": { "@antv/x6-geometry": "2.0.5" } }
用到的每个 @
antv 包都得钉,今天先别 install 。