GitHub 上数以百万计的企业软件存储库很容易受到重新劫持,这是一种相对简单的软件供应链攻击,威胁行为者将依赖于特定存储库的项目重定向到恶意攻击。
研究人员在本周的一份报告中表示,这个问题与 GitHub 用户或组织更改项目名称或将其所有权转让给另一个实体时 GitHub 如何处理依赖项有关。
为了避免破坏代码依赖关系,GitHub 在原始存储库名称和新存储库名称之间创建了一个链接,以便所有依赖于原始存储库的项目都会自动重定向到新重命名的项目。但是,如果组织未能充分保护旧用户名,攻击者可以简单地重用它来创建原始存储库的木马版本,以便任何依赖该存储库的项目将再次开始从中下载依赖项。
研究人员本周在博客中表示:当存储库所有者更改其用户名时,会在旧名称和新名称之间创建一个链接,供任何从旧存储库下载依赖项的人使用。但是,任何人都可以创建旧用户名并破坏此链接。
研究人员最近决定调查 GitHub 上易受此类重新劫持或依赖项存储库劫持(一些安全研究人员提到的威胁)的存储库的普遍性。
GitHub 上存在数以百万计的此类存储库,其中包括属于 Google 和 Lyft 等公司的存储库;攻击者可以轻松使用工具来找到这些存储库并劫持它们。
其中一个工具是 GHTorrent,该项目在 GitHub 上维护所有公共事件的近乎完整的记录,例如提交和拉取请求。攻击者可以使用 GHTorrent 获取组织以前使用的存储库的 GitHub 名称。然后,他们可以使用旧用户名注册存储库,重新创建存储库,并将恶意软件传递到使用它的任何项目。
如果存储库的所有者更改或删除其存储库的用户名,任何直接引用 GitHub 存储库的项目都容易受到攻击。
我们提供了一个重要的数据集,攻击者可以利用该数据集获取属于组织的先前存储库的名称。
组织不应假设其旧组织名称将保持不公开状态。对于他们来说,在 GitHub 上认领并保留旧用户名并扫描代码中的 GitHub URL 和引用以识别可能被攻击者认领的任何存储库至关重要。
GitHub 已尝试通过阻止创建以前拥有但现在重定向到其他项目的用户名和存储库来解决此问题。GitHub 几年前还实施了一种机制来淘汰流行的存储库命名空间,作为减轻这种威胁的一种手段。
在过去几年里,已经发现了一些绕过方法,在 研究过程中,其研究人员发现了几个不适用 GitHub 实施的保护的存储库示例。因此,用户目前不能完全依赖这些防御措施。
Checkmarx 去年发现的GitHub 漏洞是攻击者绕过 GitHub 防止重新劫持尝试的方法之一。该缺陷涉及一种名为“流行存储库命名空间退休”的机制,并影响 GitHub 上所有重命名的用户名,包括 Swift、Packagist 和 Go 等包管理器上的 10000 多个包。
Checkmarx 在有关该漏洞的报告中表示:重新劫持是一种劫持重命名存储库 URL 流量并通过利用破坏原始重定向的逻辑缺陷将其路由到攻击者存储库的技术。当 GitHub 存储库的创建者决定重命名其用户名而旧用户名可供注册时,该存储库很容易受到重新劫持。
组织可以通过扫描其代码、存储库和 GitHub 链接的依赖项来减轻遭受重新劫持威胁的风险:他们应该检查这些链接是否直接引用 GitHub 项目,或者是否有重定向指向其他用户名或存储库下的存储库名称比原来的链接。
在这些情况下,组织应尝试声明可用的用户名,以防止攻击者这样做。此外,组织应该始终在 GitHub 上保留他们的旧用户名。
GitHub 数据集研究表明数以百万计的人可能容易受到 RepoJacking 攻击
https://blog.aquasec.com/github-dataset-research-reveals-millions-potentially-vulnerable-to-repojacking#Appendix_A