(资料图片)
Aqua Nautilus 最新的一份研究报告指出,数以百万计的 GitHub 存储库可能容易受到 RepoJacking 的攻击,攻击者可以在组织的内部环境或其客户的环境上执行代码。
研究人员共分析了 125 万个 GitHub 存储库的样本,发现约有 2.95% 容易受到 RepoJacking 攻击;其中不乏一些来自 Google 和 Lyft 等公司的存储库。基于该百分比推算到 GitHub 共 3 亿多的仓库数量上,研究人员估计该问题影响了大约 900 万个项目。目前 Aqua 已经向所有易受影响的组织披露了这一漏洞,以降低风险。
GitHub RepoJacking(也称为依赖库劫持)是一种供应链攻击,允许攻击者接管 GitHub 项目的依赖项或整个项目,以便对使用这些项目的人运行恶意代码。当 GitHub 用户/组织更改名称时,可能会发生 RepoJacking。
GitHub 也针对 RepoJacking 攻击实施了一些防御措施,但 AquaSec 指出,这些解决方案并不完整,且可以被攻击者绕过。“它们仅适用于重命名之前流行的存储库;最近研究人员发现了许多绕过这些限制的方法,允许攻击者打开他们想要的任何存储库。”
Aqua深入研究了 RepoJacking 攻击的利用场景,并进行了示例说明。就谷歌而言,AquaSec 发现一个包含构建Mathsteps 项目的说明的 readme 文件指向一个属于 Socratic 的 GitHub 仓库;该公司于 2018 年被谷歌收购,但现已不复存在。
攻击者可以克隆该存储库来破坏重定向,因此遵循 readme 说明的用户可能会从恶意存储库下载恶意代码。用户访问包含攻击者插入的恶意代码的文件,从而使攻击者能够在用户的设备上实现任意代码执行。
AquaSec 在 Lyft 公司的存储库中发现了一个 install.sh 脚本,旨在从另一个很容易受到 RepoJacking 攻击的存储库中下载一个 zip 存档。
“这意味着使用 Lyft 软件库中 install.sh 脚本的用户会在不知情的情况下从另一个软件库中获取一个文件并运行它。只要新旧存储库之间的重定向正常,这段代码就没有问题。然而,旧的存储库很容易受到 RepoJacking 的影响。攻击者可以很容易地打开可用的组织 YesGraph,并创建版本库 Dominus。完成此操作后,新旧存储库之间的重定向将不再存在,并且将从攻击者控制的存储库下载 zip 文件。从而会导致对原始存储库用户的任意代码执行。”
为了降低风险,AquaSec 建议组织:
定期检查存储库中是否有任何可能从外部 GitHub 存储库获取资源的链接,因为对 Go 模块等项目的引用可以随时更改其名称。 如果你更改组织名称,请确保你仍然拥有以前的名称(即使是作为占位符),以防止攻击者创建它。研究人员还警告称,他们分析仅涵盖了可用数据的一小部分,事实上还存在更多易受攻击的组织。