持续性威胁:新漏洞将数千个GitHub代码库和数百万用户置于险境

VSole2023-09-25 10:21:17

近日发现的一个新漏洞让攻击者可以利用GitHub的代码库创建和用户名重命名操作中的竞态条件。该技术可用于执行代码库劫持攻击(劫持流行的代码库以分发恶意代码)。这一发现标志着已第四次发现了一种独特的方法,有可能绕过GitHub的“流行代码库命名空间退役”机制。这个漏洞已报告给了GitHub,已得到修复。

重要发现

• 发现了一个新颖的漏洞,利用在GitHub上创建代码库和重命名用户名的进程之间的竞态条件。

• 成功利用该漏洞可以劫持Go、PHP和Swift等语言的4000多个代码包,以及劫持GitHub操作,从而影响开源社区。值得注意的是,数百个这样的代码包已获得了1000多颗星,数百万用户和无数应用程序可能因此受到影响。

• 该漏洞已被负责任地披露给GitHub,GitHub随后发布了补丁。

什么是代码库劫持?

代码库劫持是一种攻击者通过利用逻辑漏洞控制GitHub代码库的技术,该漏洞可使重命名的用户容易受到攻击。

攻击者劫持GitHub上一个合法的、常常很流行的命名空间。命名空间是用户名和代码库名称的组合,比如:example-user/example-repo。

当使用GitHub的“用户重命名”功能更改原始用户名时,命名空间可能容易受到代码库劫持的攻击。

用户名更改过程快速又简单。一则警告让你知道旧代码库URL的所有流量将被重定向到新代码库。

在关于这项功能的文档中,GitHub提到了重要的影响:

“更改用户名之后,其他任何人都可以声称拥有你的旧用户名。”

一旦用户名被重命名,攻击者可以声明旧的用户名,在匹配的代码库名称下打开代码库,并劫持命名空间。

“退役”命名空间保护

为了缓解这种潜在的有害行为,GitHub实施了“流行代码库命名空间退役”保护措施:任何在用户帐户重命名时克隆超过100次的代码库都被视为“退役”,无法被其他人使用。

澄清一下:被认为“退役”的是命名空间,意指用户名和代码库名称这个组合。

比如说,不妨以用户名“account-takeover-victim”的名为“repo”的代码库为例。

这个代码库最近被克隆了100次,因此它符合流行代码库命名空间退役的条件。

此时,帐户的所有者决定将用户名重命名为他所选择的名称。

这么做的实际结果是,用户名“account-takeover-victim”现在可以被任何人声称拥有。

然而,一旦这个用户名的新所有者试图打开一个名为“repo”的新代码库,他们将被阻止,并得到以下消息:

这样一来,任何人都可以声称拥有旧用户名,但是一旦这个新用户名所有者试图用“退役”的名称创建新的代码库,GitHub会阻止这种尝试。

影响

成功利用漏洞使攻击者可以接管几个包管理器中的流行代码包,包括“Packagist”、“Go”和“Swift”等。我们已经在这些包管理器中发现了超过4000个使用重命名用户名的包,如果发现新的绕过技术,它们可能受到这种技术的攻击。在这些面临险境的代码包中,数百个已在GitHub上获得了1000多颗星。

此外,利用这种绕过机制还可能导致流行的GitHub操作被接管,这些操作也可以通过指定GitHub命名空间来使用。对流行的GitHub操作投毒可能会导致重大的供应链攻击,会带来重大影响。

Aqua最近的研究表明,像谷歌和Lyft这样的大企业都很容易受到这种形式的攻击。这凸显了该漏洞的严重性,因为它可能会影响到科技行业的一些大公司,这些公司在接到漏洞通知后迅速降低了风险。

绕过退役命名空间保护的新利用方法

新的利用方法利用了代码库创建和用户名重命名之间潜在的竞态条件。Checkmarx SCS部门架构师Elad Rapoport能够演示通过几乎同时创建代码库和更改用户名,如何能绕过GitHub检查。

重现这个漏洞的步骤如下:

1. 受害者拥有命名空间“victim_user/repo”。

2. 受害者将“victim_user”重命名为“renamed_user”。

3. “victim_user/repo”代码库现在已经退役。

4. 拥有用户名“attacker_user”的攻击者准备了一个命令,该命令创建一个名为“repo”的代码库,并几乎同时将用户名“attacker_user”重命名为受害者的用户名“victim_user”。这是使用创建代码库的API请求和拦截用户名更改的重命名请求来完成的。

使用pseudo-exploitation命令的示例

这一发现标志着已第四次发现执行代码库劫持的替代方法。Checkmarx在2022年两次发现并报告了绕过“流行代码库命名空间退役”机制的活动,GitHub在这两次都修复了漏洞。

外部研究人员Joren Vrancken在2022年发现了绕过该机制的第三个漏洞,GitHub也解决并修复了这个漏洞。

用户能做什么?

我们建议避免使用退役的命名空间以尽量减小攻击面,并确保代码中没有导致GitHub代码库容易受到代码库劫持攻击的依赖项。

此外,考虑使用ChainJacking(https://github.com/Checkmarx/chainjacking),这是一个由Checkmarx开发的开源项目,旨在帮助你了解是否有任何Golang直接GitHub依赖项容易受到代码库劫持攻击。

时间线

2023年3月1日——Checkmarx发现了一个绕过GitHub命名空间退役功能的额外漏洞,并向GitHub披露了它。

2023年9月1日——GitHub回复,它已修复了这个漏洞。

结语

在GitHub的代码库创建和用户名重命名操作中发现这个新漏洞突显了与“流行代码库命名空间退役”机制相关的持续风险。

许多GitHub用户(包括控制流行代码库和包的用户)选择使用GitHub提供的“用户重命名”功能。出于这个原因,试图绕过“流行代码库命名空间退役”对于供应链攻击者来说仍然是一个颇有吸引力的攻击点,有可能造成重大破坏。

此外,值得注意的是,GitHub提供的保护是基于内部指标激活的,并且根本没有向用户表明某个特定的命名空间是否受其保护。这可能会使一些代码库和包在不知情的情况下处于险境。

我们建议避免使用退役的命名空间,并考虑使用我们的ChainJacking开源项目来识别易受攻击的包。

我们的团队继续努力识别这些漏洞,以确保开源社区的安全。该漏洞已报告给了GitHub。

用户名重命名
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日发现的一个新漏洞让攻击者可以利用GitHub的代码库创建和用户名重命名操作中的竞态条件。该技术可用于执行代码库劫持攻击(劫持流行的代码库以分发恶意代码)。这一发现标志着已第四次发现了一种独特的方法,有可能绕过GitHub的“流行代码库命名空间退役”机制。这个漏洞已报告给了GitHub,已得到修复。
The Hacker News 网站披露,安全研究员发现 GitHub 中存在一个新安全漏洞,该漏洞可能导致数千个存储库面临劫持攻击的风险。据悉,在 2023 年 3 月 1 日漏洞披露后,微软旗下的代码托管平台已于 2023 年 9 月 1 日解决了安全漏洞问题。
研究人员发现了针对Mac的恶意加密货币交易应用程序的网站。该恶意软件用于窃取信息,例如浏览器Cookie,加密货币钱包和屏幕截图。通过分析恶意软件样本,我们很快发现这是趋势科技研究人员称为GMERA的一项新活动,他...
现在,研究人员发现了一种新的、狡猾的攻击技术,黑客目前正在使用这种技术来接管经过验证的Twitter账户,并将其重命名为有影响力的人,以便传播假新闻。因此,受害者试图重新访问其帐户的任何尝试都将失败,因为攻击者只需通知Twitter问题已得到解决,即可锁定合法帐户持有人。
越权访问测试
2022-06-04 06:59:32
GBT 22239-2019《信息安全技术 网络安全等级保护基本要求》中,8.1.4.2安全计算环境—访问控制项中要求包括: a)应对登录的用户分配账户和权限; b)应重命名或删除默认账户,修改默认账户的默认口令; c)应及时删除或停用多余的、过期的账户,避免共享账户的存在; d)应授予管理用户所需的最小权限,实现管理用户的权限分离; e)应由授权主体配置访问控制策略,访问控制策略规定主
Windows权限维持学习
2021-12-16 20:06:43
本文来自“白帽子社区知识星球”作者:17白帽子社区知识星球加入星球,共同进步0x00 windows权限维持
Linux后门RedXOR
2021-11-24 06:20:12
Linux后门RedXOR分析一、简介RedXOR是一个针对Linux终端和服务器的新的复杂后门程序,在20
以下测评过程以Windows server 2012R2 举例,按照等保2.0三级要求测评。 主要命令:netplwiz,lusrmgr.msc,secpol.msc,eventvwr.msc,gpedit.msc,services.msc-cmd: netstat -an,net share,firewall.cpl,appwiz.cpl
VSole
网络安全专家