事件经过
JFrog将42个武装的第三方GitHub仓库(涉及11个合法所有者)与testmetest npm活动关联起来。恶意npm发布使用binding.gyp命令扩展在安装期间执行代码,解密载荷窃取GitHub和npm凭证、污染仓库和CI配置,并为AI编程助手和IDE植入执行钩子——将SessionStart钩子注入Claude Code设置和VS Code任务。GitHub方面携带12.9-13.8 MB的多态包装器和隐藏发布者,设计通过GitHub Actions运行以产生更多恶意发布。后续投递切换到预编译原生插件(addon.node),在运行时解密.napi_cache点文件以执行真正的载荷,并具有反CI/容器检查。
影响分析
这是一条供应链蠕虫,直接瞄准AI编程代理的配置/钩子面(SessionStart钩子、VS Code任务、CI配置),将正常的包/仓库安装转变为凭证窃取并通过开发者已经信任的注册表进行自我传播。它揭示了代理执行攻击类别以及CVE种子数据不包含的活跃活动信号。
攻击途径
恶意npm包安装(binding.gyp命令扩展)或使用被劫持的GitHub仓库;载荷窃取GitHub/npm凭证并将SessionStart钩子注入AI编程助手配置,然后传播至更多仓库/包。
受影响系统
npm生态系统(testmetest系列包,如event-bus-lite-testmetest、path-stream-utils-testmetest、@iobandamwer/*辅助包)和被劫持的GitHub仓库;Claude Code / VS Code / AI编程代理配置面。
缓解措施
固定并审查依赖项,审计克隆仓库中的SessionStart钩子和VS Code任务,验证npm可信发布令牌,监控GitHub Actions中的短时未知发布者工作流,并将testmetest系列包/所有者名称视为指标。