新思科技发现近几个月,依赖仓库劫持漏洞(简称为Repo Jacking)持续增加,对开源仓库的威胁也越来越普遍。依赖仓库劫持攻击一旦得逞,可能会对包或产品的用户产生严重的安全隐患,尤其是在受影响的包被用作依赖项的情况下。这通常是由于攻击的性质导致的--允许不受限制的恶意代码上传,重新发布现有版本或发布新版本。
![](http://www.ctiforum.com/uploadfile/2022/0815/20220815025902853.jpg)
Repo Jacking:依赖仓库劫持漏洞
Repo Jacking是恶意攻击者对托管仓库的所有者或维护者账户的故意、强制接管。访问该账户后,攻击者可以将恶意代码注入项目或将其用作依赖项的项目。
这种类型的供应链攻击往往通过利用GitHub 等托管平台缺乏重新注册验证的漏洞。攻击方式主要有两种:
- 修改用户名:当托管平台的用户修改其用户名时,攻击者可能会使用原始用户名重新注册仓库。这允许重新创建仓库,使用该项目作为依赖项的包可能仍会访问原始仓库URL, 以进行更新。
- 账户删除:与修改名称类似,攻击者可以重新注册已删除的账户,并重新创建仓库。这种方法更有可能导致项目在试图通过 URL 获取仓库时出错,因为链接会被破坏。这可以被绕过,因为攻击者会在用户删除账户和项目尝试提取仓库的间隔内重新注册已被删除的用户名。
在这两种情况下,攻击者都有效地获得了对仓库的完全控制权,从而允许他们执行各种特权操作。这些可能涉及指定其他恶意用户或自行创建的账户作为管理员/维护者,进而用于批准对仓库的推送和拉取请求。通过这种方式,可以将恶意或不需要的代码强制注入到项目的新版本中。相反地,可以从仓库中删除版本和功能代码,或故意推送中断提交,从而允许阻碍或破坏预先存在的功能。
保护企业免受Repo Jacking的方法
随着供应链攻击的增加,Repo Jacking的案例也在增加,因为它通常是供应链攻击的第一步。接管仓库可能是一个简单的过程,但仍会导致严重的负面影响。目前有一些可用的补救措施正在研究中,以应对此类攻击。
多因素身份验证(MFA),通常为双因素身份验证(2FA),为账户访问提供第二层安全性。从理论上讲,它应该可以防止不法分子获得对过期或已删除账户的访问权限。 GitHub是最大的Git仓库的托管主机之一。GitHub宣布从 2023 年起,所有维护者账户都将强制执行2FA。这代表着2FA的采用率将大幅上升,因为目前只有16.5%的活跃 GitHub 用户使用 2FA。另一方面,流行的 JavaScript 包管理器 npm 并没有强制执行,也没有宣布打算强制执行 2FA。
域名接管是供应链劫持仓库的常见手法,例如当不法分子重新注册电子邮件的过期域并使用该域请求重置密码。仓库
托管平台可以先发制人,尝试通过删除或暂停有即将到期和已过期域的账户,以防止这种情况发生。切断供应链中的链接是阻止访问可能受到损害的账户的重要一步。但是,这将对托管平台产生更大的维护和监控责任。
在接下来的几个月甚至几年里,开源项目将继续扩大和账户数量也在增加,依赖项更多并且容易受到劫持。同时,更多所有者和作者账户将变得不活跃并被删除,不法分子更加有机可乘,劫持仓库。
尽管可以通过补救措施来防止其中许多漏洞,但当前的行业格局表明,选择使用 MFA 等预防性技术的用户数量有限。强制执行2FA等方法可能是未来的发展方向。
凭借增强型漏洞数据防患未然
Black Duck Security Advisories (BDSA)为用户提供有关漏洞披露的详细信息,自动生成的警报概述了易受攻击的代码和已使用软件包中的补救措施。客户可以使用 BDSA 快速修复新漏洞并了解包中的恶意开发,例如 Repo Jacking。BDSA会详述被劫持的软件包易受攻击的版本、关键信息和新的开发,例如分叉的仓库。
很多解决方案单单依赖美国国家漏洞数据库(NVD)的数据。但是,许多漏洞和受影响的开源项目从未在NVD中记录过,并且漏洞通常都是在发布几周之后才被列入NVD。BDSA借助由 新思科技网络安全研究中心 (CyRC)分析的增强型数据,保证完整性和准确性,并且可当日告知新报告的安全漏洞,平均比 NVD 提早了三周。这可以为用户尽早发出漏洞提醒并提供全面的见解,大幅降低供应链安全风险。