RepoJacking攻击影响数百万GitHub库。
数百万GitHub库受到依赖库劫持攻击"RepoJacking"的影响,可以帮助攻击者首先供应链攻击,影响数百万用户。
RepoJacking攻击
GitHub上用户名和库名是经常变化的。如果企业被受到或合并,名字就会发生变化。名字发生变化后,就会创建重定向来避免破坏项目依赖。但如果有用户注册了原来的用户名或库名,重定向就无效了。
RepoJacking攻击是指恶意用户注册一个GitHub用户名,并创建一个该组织过去使用的库,然后修改其名。通过RepoJacking攻击,攻击者可以依赖被攻击项目的依赖来从攻击者控制的库中取回依赖和代码,其中可能包含恶意软件。
攻击案例
AquaSec安全研究团队Nautilus分析了125万GitHub库,发现其中2.95%可能受到RepoJacking攻击的影响。GitHub库总数超过3亿,按照2.95%的比例,超过900万项目受到该攻击的影响。
在Google的库例子中,"Mathsteps"项目指向属于Socratic的GitHub库。Socratic是谷歌收购的一家公司。攻击者可以克隆库来破坏重定向,用户根据readme文件指示会从恶意库中下载恶意代码。由于readme文件中包含npm install 依赖命令,攻击者的代码可以在受害者设备上实现任意代码执行。
图 谷歌 readme文件中的命令
在Lyft的例子中,攻击者可以自动执行。研究人员在该公司的库中发现一个安装脚本,可以从另一个库中取回一个zip压缩文件,因此也受到RepoJacking攻击的影响。
攻击者首先注册一个新的用户名和使用正确名的库(YesGraph和Dominus),然后可以注入代码到任意执行Lyft的"install.sh"脚本。
图 指向外部库的Lyft脚本
总结
GitHub已经意识到RepoJacking攻击的可能性并实现了一些防护措施。但AquaSec称这些防护措施还不够充分,易被绕过。比如,GitHub只对那些比较流行的项目进行保护。GitHub会对克隆数超过100的项目修改名时进行保护。
RepoJacking的风险是非常广泛的,也难以修复,会对企业和用户带来严重的风险。项目所有者应当尽可能最小化从外部库提取资源。
完整技术细节参见:https://blog.aquasec.com/github-dataset-research-reveals-millions-potentially-vulnerable-to-repojacking
参考及来源:https://www.bleepingcomputer.com/news/security/millions-of-github-repos-likely-vulnerable-to-repojacking-researchers-say/