开发者账号遭入侵致四百余个开源包被污染
IT时代网8月5日消息,一家安全机构披露,热门 JavaScript 工具库 keyv 的维护者 GitHub 账号被人攻破,攻击者拿到了代码修改与版本发布权限,随即在其管理的 11 个 npm 包里塞进了窃取凭证的恶意蠕虫。事情没有停在这 11 个包上——蠕虫顺着被污染的软件包继续偷取其他开发者的发布凭证,不到 4 小时就扩散至另外 433 个软件包,受污染总数达到 444 个,牵涉 2212 个恶意版本和 14 家以上的组织。
受感染的 11 个包分布在 keyv、cacheable 和 ecto 三个项目下,具体包括 keyv、flat-cache、file-entry-cache、cacheable-request、cacheable 以及 cache-manager 等。这几个名字对前端开发者并不陌生。keyv 是一款键值存储工具,每周下载量超过 1.5 亿次;flat-cache 和 file-entry-cache 的每周下载量同样接近 1.5 亿次,还被 ESLint 这类常用工具间接依赖。
攻击路径设计得相当熟练。拿到账号之后,攻击者在三个项目里植入恶意文件并创建新版本,借助项目原本就配置好的自动构建发布流程,把 11 个带蠕虫的包推送到 npm 仓库,这成了后面大规模扩散的起点。
恶意包会在安装前先执行一个名为 setup.mjs 的脚本,它做的第一件事是下载合法的 Bun 运行环境,随后才启动真正的凭据窃取程序。搜刮范围很广:NPM、GitHub、AWS、Azure、Google Cloud、Kubernetes 以及 HashiCorp Vault 的访问凭证,SSH 密钥,数据库连接信息,甚至 Claude、Codex、Cursor 等 AI 编程工具的登录数据都在名单上。
真正让事态失控的是自动传播机制。如果中招的开发机或企业构建环境里存有 npm 发布凭据,蠕虫会自动查询该账号拥有管理权限的全部项目,把已有版本代码拉下来,注入自身之后重新发布。就这样一层层扩散到 433 个包,Deliveroo、Picsart、Qlik、ServiceTitan 等组织都受到波及。部分软件包历史版本较多,蠕虫连历史版本一并打包污染,最终堆出 2212 个恶意版本。
怎么防?安全团队给开源项目维护者的建议是改用 Passkey 或实体安全密钥保护账号,收窄 GitHub Token 的权限范围,同时启用主分支保护和强制代码审查。企业侧的做法更偏工程约束:给新发布的软件包版本设置 3 到 7 天冷却期再引入,在持续集成环境中限制包安装命令和外部网络访问,并盯住新版本里突然冒出来的可执行文件与安装脚本。
说白了,这次事件暴露的不是某个包的漏洞,而是整条依赖链的信任传递问题——一个维护者的账号失守,下游几十万个项目都得跟着排查。

注:本文中包含AI辅助创作的内容。