前言
npm
注册表中的一个逻辑缺使恶意软件包能够悄悄地将任何人和任意数量的用户添加为他们的软件包的维护者,以试图提高对其软件包的信任。
在云原生安全公司Aqua
报告该问题后,GitHub
的 NodeJS
组件存储库现已修复该漏洞。
包植入:添加任何受欢迎的开发人员或公司作为包维护者
npm
注册表中的一个安全漏洞,称为包植入,允许恶意用户悄悄地将 任何开发人员(以及任意数量的开发人员)作为维护者
添加到他们的恶意包中。
Aqua
团队Nautilus
的安全研究员Yakir Kadkoda
表示:
“ 直到最近,
npm
允许在不通知用户或征得他们同意的情况下,添加任何人作为包的维护者。”
这个举动不但没有通知被添加为非法软件包维护者的个人或者公司,而且也没得到他们的批准允许。
更糟糕的是,在将其他维护者添加到他们恶意包之后,攻击者还可以悄悄地将自己从包的维护者列表中删除,从而只留下了与包无关的维护者。
这为那些期望提高自己恶意软件包的攻击者提供了便利。通过在恶意软件包中添加可靠的和受欢迎的开发者以及公司作为维护者,增加了开发人员安装其恶意软件包的机会,并且不容易引起注意。
为了更好的演示这个现象。Kadkoda
发布了一个测试包fb_npm_package
,在演示开始的时候,他的npm
账户是该测试包的唯一维护者。
然后他将 Facebook (Meta)和 npm 的公众号添加到项目的维护者列表中,然后将自己删除。
任何访问fb_npm_package
包npm
页面的人,都会认为包的所有权仅包括Facebook
和npm
,这是一种高度误导。
据BleepingComputer
报道,2021
年3
月,安全研究员Alex Birsan
还应用了该技术的一个用例,将他的假测试包列在 Microsoft Azure SDK 的官方网站上。
Aqua
研究人员在发布的一份报告中写道:
由于你可以在任何流行的维护者下发布中毒包,我们将这个逻辑缺陷及其影响命名为包植入
当一个项目的整个所有权和维护者列表发生改变时,事情变得更加复杂。
声誉问题,而不仅仅是安全问题
Kadkoda
强调,除了安全漏洞之外,诸如包植入之类的技术可能会被对手滥用,以损害社区中备受尊敬的开发人员的声誉。
如果攻击者仔细挑选这些未来的维护者,这将影响包的声誉和发展。例如,lodash包非常受欢迎和可信。如果我们将它的所有者 Mathias、 jdalton和 bnjmnt4n 添加 到一个新的恶意包中,许多开发人员可能会被欺骗认为这个包是合法的,甚至非常有吸引力。
如果恶意程序包后来被npm
捕获到,一种可能出现的情况是可能会暂停被错误地认为违反平台 政策 的新维护者的帐户。
Kadkoda
最终从npm
中删除了他的测试包,并将该漏洞报告给npm
。
该测试中使用的测试包fb_npm_package
的副本显示该包是干净的并且不包含功能代码,只是一个清单文件:
但是恶意攻击者可以通过包植入
做到更多。
即使没有这些缺陷,攻击者也能够反复攻击npm
,PyPI
和RubyGems
开源存储库使恶意软件包获得数千次下载
像这样的技术将进一步授权攻击者为他们原本非法和恶意的包添加一个主要的合法性认证。
修复
Aqua
于2
月10
日向GitHu
的HackerOne
漏洞赏金计划报告了其发现,并于13
日收到了确认。
到4
月26
日,GitHub
修复了npmjs.com
上的漏洞并引入了保护措施:邀请新的维护者加入你的npm
包,现在要求他们批准你的请求,然后才能将他们添加到你的项目中。
目前已经没有办法再在npm
上复现该问题,也没有任何迹象表明该技术已被攻击者积极利用。
无论如何,Kadkoda
警告现有开发人员仔细检查其npm
帐户下列出的项目:
“
npm
用户应检查以他们的名义列出的所有包是否真正属于他们,以确保未经他们的同意将它们添加到任何项目中。”
了解本次漏洞更加详细内容,请移步:www.bleepingcomputer.com/news/securi…