一个学术研究项目发现,数千名JavaScript开发人员正在为他们的npm帐户使用一个带有过期域的电子邮件地址,使他们的项目容易被劫持。
微软和北卡罗琳州立大学的研究人员去年进行了这项研究,分析了上传到Node Package Manager(npm)上的1630101个库的元数据。Node Package Manager是JavaScript库的事实存储库,也是互联网上最大的包存储库。
研究人员表示,他们发现2818名项目维护人员仍在使用他们的帐户的电子邮件地址,这些帐户的域名已过期,其中一些在GoDaddy等网站上出售。
该团队认为,攻击者可以购买这些域,在自己的电子邮件服务器上重新注册维护者的地址,然后重置维护者的帐户密码并接管其npm包。
这样的攻击会起作用,因为npm门户不会对帐户所有者强制实施双因素身份验证(2FA),这意味着一旦攻击者重置所有者的密码,他们就可以在任何其他障碍的情况下自由更改包。
研究团队表示,总共有2818个维护者帐户管理8494个包,这些包平均有2.43个直接依赖者,这意味着任何攻击都会影响数万个其他下游项目。
帐户所有者可以发现类似的帐户劫持,但研究人员还指出,许多npm库和帐户要么没有维护(58.7%)要么被放弃(44.3%),攻击者很有可能在维护者没有注意到的情况下实施攻击。
研究团队表示,他们将报告的发现通知了npm安全团队,但没有说明npm团队的反应。在本文发表之前,发送给npm所有者GitHub的一封电子邮件没有被回复。
然而,值得注意的是,在2021年12月公布这项研究之前几天,NPM水果挞宣布计划慢慢地开始为开发者账户强制2FA。这一过程计划分多个阶段进行,本月初,前100名维护者帐户将被纳入强制性2FA。
有关该研究的更多详细信息,请参阅“npm供应链中的薄弱环节是什么?”研究论文。研究团队的其他一些发现也列在下面:
2.2%(33249)的软件包使用安装脚本,这些脚本可能被滥用来运行恶意命令,并且违反npm最佳安全实践;
排名前1%的软件包(14941个)平均每个软件包有32.4个维护者,这为不活跃或漫不经心的开发人员的帐户打开了攻击之门;
389个包为每个维护人员提供了40个贡献者,为意外插入安全漏洞打开了大门,或者为一个项目注入了大量的贡献来潜入恶意代码;
前1%的维护人员平均拥有180.3个包,直接依赖于4010个平均包,这意味着一些开发人员可能工作过度,或者没有时间彻底维护或审查包更改。