在GitHub中披露的一个新的漏洞可能已经暴露了成千上万的存储库在repojacking攻击的风险,新的研究结果显示。
该缺陷”可能允许攻击者利用GitHub的存储库创建和用户名重命名操作内的竞赛条件,”Checkmarx安全研究员埃拉德·拉波波特在与黑客新闻共享的技术报告中说。
“成功利用此漏洞会劫持Go、PHP和Swift等语言的4000多个代码包以及GitHub操作,从而对开源社区造成影响。”
在2023年3月1日进行负责任的披露后,微软拥有的代码托管平台已于2023年9月1日解决了该问题。
repo jacking是repository hijacking的缩写,是一种威胁参与者能够绕过一种名为repository namespace retirement的安全机制并最终控制存储库的技术。
保护措施所做的是防止其他用户在用户帐户重命名时创建一个具有100多个克隆的存储库,其名称与存储库相同。换句话说,用户名和仓库名的组合被认为是“退休”的。
如果这一安全措施被轻易绕过,它可以使威胁行为者以相同的用户名创建新的帐户,并上传恶意存储库,可能导致软件供应链攻击。
Checkmarx概述的新方法利用了在创建存储库和重命名用户名之间的潜在竞争条件来实现重新劫持。具体而言,它需要采取以下步骤:
受害者拥有名称空间“受害者_user/repo”
受害者将“受害者_USER”重命名为“重命名_USER”
“victim_user/repo” 存储库现在已经退役了
用户名为“attacker_user”的威胁参与者同时创建一个名为“repo”的存储库,并将用户名“attacker_user”重命名为“victim_user”。
最后一步是使用创建存储库的API请求和更改用户名的重命名请求拦截来完成的。在GitHub修补了一个类似的绕过漏洞后近九个月,该漏洞可能会打开重新劫持攻击的大门。
拉波波特表示:”在GitHub的存储库创建和用户名重命名操作中发现这种新的漏洞,强调了与’流行的存储库命名空间退休’机制相关的持续风险”。