←新闻详情

heise online更新于 10月30日 14:11

JFrog 发现 42 个 GitHub 仓库被植入 npm 蠕虫 testmetest 恶意代码

Gut getarnt: Automatisch startender Wurm bei GitHub ist schwer zu finden | heise online

AI 导读

JFrog 安全研究团队发现 42 个 GitHub 仓库被植入执行钩子和隐藏恶意代码,并将其归入 npm 蠕虫活动 testmetest。这些仓库分属 11 个合法所有者,攻击者通过被盗账号或员工权限注入代码;用户在项目中启动 Claude Code、Gemini 或 Cursor,或以相应设置打开 VS Code 工作区时,相关配置可能执行隐藏文件 .github/init.js。JFrog 列出 15 个至少有一个版本被判定为恶意的 npm 包,并建议检查受影响系统、审查仓库配置与工作流、吊销可能泄露的凭据;SafeDep 称该蠕虫会安装清除程序,在受害者吊销被盗 GitHub token 时删除其主目录。

推荐理由

AI 评分 69

原文披露攻击者借 Claude Code、Gemini、Cursor 的项目配置触发隐藏脚本,为开发者评估本地仓库风险提供了具体线索。

主题

标签

正文 · AI 翻译

关闭提示

本文也有英文版本。

本文在技术协助下完成翻译,并在发布前经过编辑审核。

。

JFrog 安全研究团队发现 42 个 GitHub 仓库被攻击者利用执行钩子和隐藏恶意代码植入。研究人员将其归入 npm 蠕虫活动“testmetest”。目前尚不清楚有多少台计算机执行了恶意代码,以及有哪些数据被泄露。

广告后继续阅读

根据 JFrog 的分析,这 42 个被入侵的 GitHub 仓库分属 11 个合法所有者。JFrog 认定该恶意代码与 Shai-Hulud 变种相似,攻击者通过被盗账号或员工、贡献者权限将其注入其中。安全服务商 SafeDep 已于 10 月 22 日描述了该活动的 npm 方面,但当时未发现被入侵的第三方包或受害者。

AI 助手和 IDE 成为导火索

攻击者在这 42 个仓库中放置了面向开发工具的项目配置。当用户在项目中启动 Claude Code、Gemini 或 Cursor,或以相应设置将其作为 VS Code 工作区打开时,这些配置可能执行隐藏的恶意代码文件 .github/init.js。

JFrog 列出了 15 个至少有一个版本被判定为恶意的 npm 包:data-pipeline-testmetest、event-bus-lite-testmetest、event-emitter-testmetest、log-rotate-testmetest、log-sink-testmetest、net-codec-testmetest、npm-publish-testmetest、pixel-map-testmetest、retry-utils-testmetest、test-brotli-testmetest、test-brotli2-testmetest、@iobandamwer/cache-helper、@iobandamwer/native-helper、path-stream-utils-testmetest 和 @testsecuiitytestme/cache-helper。

JFrog 建议检查受影响的系统,并在必要时从可信来源重新构建。受影响者应检查仓库配置和工作流,并吊销可能已泄露的访问凭据。但需谨慎:据 SafeDep 称,该蠕虫会安装一个清除程序,一旦受害者吊销被盗的 GitHub token,就会删除其主目录。

GitHub 和 npm 凭据成为目标

部分被篡改的 npm 包中包含一个蠕虫,主要收集 GitHub 和 npm 凭据,并推动自身传播。此外,JFrog 安全专家在 .github/init.js 中发现了一段经过混淆的发布者恶意代码。它会搜索 GitHub token 等,旨在利用可用的 npm 发布权限,例如通过 GitHub Actions 发布被篡改的包版本。

广告后继续阅读

在一些被入侵的仓库中,JFrog 还发现了 Shellpanel 工作流,它们利用被评定为严重的安全漏洞 CVE-2026-41940 攻击 cPanel 系统。但研究人员认为,从 npm 感染到利用该漏洞的完整攻击链尚未得到证实。

躲过 GitHub 代码搜索

在分析过程中,载荷文件 .github/init.js 的内容起初一直不可见,因为该文件根据变种不同大小为 12.9 至 13.7 MB,而 GitHub 代码搜索不会索引如此大的文件。常规的 Contents API 也没有返回其内容。JFrog 团队直到通过 Git Trees API 列出仓库的目录树,随后直接以 Git blob 形式获取 .github/init.js,才有所发现。

JFrog 还描述了一种后期的伪装变种。在三个被调查且最近才发布的 npm 包 @iobandamwer/cache-helper、@iobandamwer/native-helper 和 path-stream-utils-testmetest 中,恶意代码并非以可读的 JavaScript 形式存在。相反,它加密隐藏在 .napi_cache 文件中。npm 包中同样包含的一个编译附加组件会在运行时解密并执行载荷。不过,该附加组件会先检查自己是否运行在分析环境中,并可能中止。

据 SafeDep 10 月 27 日的更新,另一个 npm 账号发布了包 @testsecuiitytestme/cache-helper,其附加组件在导入时就会启动蠕虫。此时 --ignore-scripts 选项不再提供保护。

威胁行为者为其活动基础设施维护了自有仓库,其中 17 个位于 GitHub 账号 CementBeetleSteeple 下。据安全专家称,其中一个仓库 stable-scripts-9965 充当数据收集点。截至 10 月 25 日,那里共有 27 个文件,包含疑似加密的数据包,命名模式为 data/snap-*.json。这些文件背后是哪些明文数据或多少受害者,目前仍不清楚,因为 JFrog 的分析仅限于元数据,未进行解密。

(mro)

来源

heise online