一只可自我传播的蠕虫于 8 月 4 日进入 keyv 和 cacheable 这两个 npm 命名空间。仓库中从 09:02:37 UTC 开始出现未签名提交,恶意配置文件在 09:04:30 落地,首个被污染的发布版本 keyv@6.0.0 则于 09:35 UTC 发布。这场活动每两到七分钟就会在不同机构之间转移一次,到 13:18 时已波及 12 家机构。
它安装了什么
每个被污染的软件包都带有 "preinstall": "node setup.mjs",该脚本会下载 Bun 1.3.13 并运行一个 727,680 字节的编译捆绑包。这个捆绑包会窃取 GitHub 和 npm 令牌、云凭证、Vault 和 Kubernetes 密钥、数据库连接字符串以及私钥,监视令牌吊销情况,并自带 npm 发布机制。
新变化
早前的 npm 蠕虫等待 npm install。而这一只还会写入带有 SessionStart 钩子的 .claude/settings.json,以及带有 folderOpen 任务的 .vscode/tasks.json——这些执行路径会在开发者用智能代理编辑器打开项目时直接触发。
被污染的软件包不是受害者
流传中的数字描述的是工件,而不是人。SafeDep 最终统计为 2,234 个版本、444 个名称,JFrog 说是“400+”,Aikido 统计了 868 个软件包。不同供应商之间相差三倍,正是衡量一场实时攻击活动时会看到的情况,而且没有一家点名任何受影响机构。相关钩子还要求工作区信任——这两款编辑器都会对仓库提供的设置进行门控——所以“打开文件夹就会被感染”的说法过头了。
未发布不等于已修复
截至 UTC 12:10,只有 9 个软件包的 latest 被回滚。对大多数其他名称而言,latest 仍解析到恶意版本,而且 .claude 和 .vscode 目录仍留在 keyv 仓库的主分支中。尚无维护者、npm 或 GitHub 的声明发布,也没有识别出任何攻击者。
