近日,JFrog 安全研究团队披露了一起供应链攻击事件:攻击者劫持了 42 个真实 GitHub 仓库,波及 11 个合法仓库所有者,并植入恶意代码,目标直指 Claude、Gemini、Cursor 及 VS Code 等开发工具用户。
与常见的提示词注入不同,这次攻击不需要诱导 AI 模型执行恶意指令,而是利用开发工具的项目配置与自动执行机制,在开发者打开项目时触发恶意脚本。
一、恶意代码藏在项目配置中
研究人员发现,攻击者在相关仓库中植入了名为 .github/init.js 的恶意脚本,文件体积约为 12.9 MB 至 13.7 MB。
攻击者通过 Claude、Gemini、Cursor 和 VS Code 等工具的配置,设置了对应的脚本执行入口。部分项目还存在 package.json、composer.json 或 Makefile 等文件的异常改动。
由于恶意文件体积异常庞大,常规代码搜索未能完整发现相关载荷。JFrog 最初只找到 26 个仓库,随后通过直接检查仓库文件树,将范围扩大至 42 个。这也意味着:代码搜索没有发现异常,并不代表仓库一定安全。
二、从 GitHub 到 npm,攻击试图形成传播闭环
此次事件与研究人员追踪的 npm 恶意软件活动有关,相关行动被称为 testmetest。
攻击者试图通过被盗账号和 自动化发布流程,将恶意代码传播至更多软件包,进一步窃取凭据并扩大攻击范围。
研究人员还发现,部分恶意 npm 包包含编译后的原生扩展和加密载荷。恶意程序会根据运行环境采取不同策略,并检查 Wireshark、Fiddler、x64dbg 等分析工具,增加安全分析的难度。
此外,攻击者还伪造了部分提交记录,使恶意变更看起来像是较早发生的正常开发活动。调查还发现,相关攻击活动涉及对 cPanel、WHM 系统的漏洞扫描。不过,目前没有证据证明相关扫描已经导致服务器成功失陷。
三、开发者应该如何防范?
针对这类攻击,开发者和安全团队可以重点做好以下工作:
- 检查项目配置:排查异常启动脚本、AI 工具配置、MCP 配置及工作区任务,重点关注
.github/init.js 等可疑文件。
- 审查依赖与发布流程:核对 npm 依赖版本、锁定文件及 GitHub Actions 工作流,防止恶意代码借助自动化流程继续传播。
- 及时处置泄露凭据:如果怀疑恶意代码已经运行,应在隔离和清除恶意程序后,撤销并轮换 GitHub、npm、云平台、SSH 等相关凭据,同时检查异常登录和发布记录。
- 隔离不可信项目:不要直接使用日常开发账号打开来源不明的仓库;应在隔离环境中检查,并限制开发工具未经审核的自动执行权限。
结语
此次事件提醒开发者:AI 编程工具带来的安全风险,不仅存在于模型本身,也可能隐藏在项目配置、自动执行钩子和软件依赖之中。一个看似正常的代码仓库,也可能成为窃取开发者凭据、传播恶意软件的入口。
资讯来源:JFrog Security Research、The Register
|