Node.js广播:Google工程师在NPM脚本中发现漏洞

图片Node.js开发人员必须自行承担运行npm install命令的风险,并记住自传播蠕虫会在生态系统中自由行走。

您永远不能认为从Internet下载的文件是安全的。对于标准Node.js包管理器NPM而言,这是正确的。安装脚本中的漏洞使攻击者可以创建可以通过NPM数据包传递的自传播蠕虫。


Google开发人员Sam Sakoni在他的文章“暴露NPM hydra”中写道:“由于一个NPM软件包可以很容易地通过自身的大部分生态系统,因此这是可能的。”

与其他程序包管理器一样,NPM支持“生命周期”脚本,这些脚本可以由系统中的外部命令作为当前用户执行。尽管这些脚本通常非常有用,并且在安装过程之后用于清理文件,编译二进制模块并自动创建配置文件,但它们同时也很危险,因为它们在执行各种命令时可能会对系统进行任何更改。
他们在NPM官方博客上写道:“在安装过程中,以恶意意图编写的NPM软件包有可能执行嵌入在其他软件包中的脚本,这些脚本又会在注册表中发布,并由用户创建其他软件包。”但是,该公司报告说,使用这些脚本的好处超过了潜在威胁的风险。

该帖子将风险降到最低,并提请人们注意“从一开始就干净”的包装,但并非所有包装都对此“百分百”地确定。 Sakoni的文章,除了一些解决方法外,没有明确说明如何确保用户安装的软件包不会达到他们的期望。

文章指出:“ NPM无法保证其程序包注册表是安全的。”

蠕虫通过数据包依赖性渗透

该蠕虫利用了NPM中的三种可能性:语义版本控制(semver),在集中式注册表中发布以及为自动登录用户提供的特权。因为用户一直保持授权,直到手动登录。登录并运行安装程序的任何人都可以使其他模块执行各种命令。只要没有对特定版本的绑定,包就可以升级到新版本,并且每个包都可以执行代码。最后,他们可以将软件包发送到中央注册表服务器,其他人可以从那里安装它们。

蠕虫攻击依赖于社会工程学来进行初始感染,并且上述“改进”可以在生态系统中自由移动。

首先,攻击者欺骗NPM软件包的所有者在其系统上安装受感染的软件包。它可能是网络钓鱼或任何其他类似的攻击。安装后,它将创建NPM模块所有者的软件包的“特洛伊木马”版本,并设置一个钩子以在安装了该蠕虫的任何位置启动该蠕虫。在所有者帐户上发布的经过修改的模块成为感染其所有软件包的起点,从而将Trojan模块作为依赖项启动。该蠕虫会在帐户中创建带有注释“ bugfix”的模块的新版本,现在,在安装该蠕虫时,可以执行自传播代码。

举个例子。 Phonegap具有463个中间依赖项。 276个NPM帐户可以更新其软件包的版本。 Sakoni说,现在这276个中只有一个人足以使蠕虫继续感染从PhoneGap项目安装软件包的每个人。

NPM否认风险

尽管尚未关闭漏洞,但美国计算机应急准备小组针对该漏洞的注释着重介绍了几种解决风险的解决方案。他们在安装新的依赖项时使用“ -ignore-scripts”选项,使用“ npm-shrinkwrap”关闭版本,并鼓励其模块自身始终不受NPM阻止的用户。

在其环境中使用NPM的组织必须运行本地NPM注册表镜像,并防止单个用户直接从主注册表中安装依赖项。他们应定期检查本地注册表,并确保恶意文件不在依赖列表中。

Sakoni建议设置令牌的到期时间,并在一段时间后强制用户退出NPM。该公司没有在博客中描述这些建议,而是宣布了其他解决方案以最大程度地降低风险。

一种想法是使模块的发布复杂化,如果用户不知道危险,则可能是两因素认证。您仍然可以与提供保护的公司合作,提供后者以检查模块,但是到目前为止这是不可能的。目前,该公司监视着频繁更新的软件包,因为该蠕虫可以通过非常频繁地发布新版本来检测,但它们更多地依赖于用户,这些用户自己会通知可疑软件包。

博客说:“毫无疑问,如果许多用户试图大规模发布恶意软件包,它们将在NPM注册中心可用。”

信任但要验证

对于NPM来说将是困难的几天。识别恶意发布的软件包是他们的“致命弱点”。在当前有关由管理员从注册表中删除软件包的管理主题的辩论中。开发人员上周从NPM删除了该软件包,从而中断了许多依赖该软件包的项目。在远程模块的名称下注册代码也非常简单。任何分配了他人名字的人都可以将代码设置给任何用户,这取决于原始用户。

在过去的几天中,Reddit和GitHub一直在讨论有关开发人员的信任,他们所创建的程序包的支持以及他们是否将开始创建恶意代码的问题。在全球生态系统中,这是一个危险的假设,因为如果这样的开发人员想要破坏很多代码,他将不得不面对整个社区。但是,必须有安全安装模块的方法,它可以是数字签名,也可以是其他检查代码安全性和正确性的方法。同时,每次运行“ npm install”命令时,只会感觉到警报。

原始文章:www.infoworld.com/article/3048526/security/nodejs-alert-google-engineer-finds-flaw-in-npm-scripts.html

Source: https://habr.com/ru/post/zh-CN392409/


All Articles