npm行不行,包管理机制行不行?

最新的一次npm包被篡改事件,让开发者的这两个疑问更加强烈了。

最新中枪的是纯函数式编程语言Purescript,这种可编译为JavaScript,能用于开发Web、服务器端应用程序的语言,其npm安装程序中被植入了恶意代码。

发现漏洞的程序员Harry Garrood表示,恶意代码的目的是破坏Purescript npm安装程序,防止它成功运行。

距离问题暴露已经过去了一段时间,但对于此事的讨论依旧热烈。今天,一则《Purescript npm安装程序中的恶意代码》的贴子在Hackernews上火速升温,短短几个小时热度超过300。

这件事来龙去脉如何,可以带来哪些教训?

交接过程出问题

npm,全称Node Package Manager,相当于js的“pip”,是一个包管理工具。

出问题的Purescript npm是本月5日上架的版本,恶意代码被添加到Purescript npm安装程序的各种依赖项中。

先是插入到load-from-cwd-or-npm 3.0.2版本的npm包中,然后插入到rate-map 1.0.3版本开始的npm包中,伪装自己然后得以传播。

代码破坏了Purescript npm安装程序,让用户无法完成下载过程。

7月9日,Garrood发现了恶意代码rate-map,并报告给了npm support。

随后,Garrood着手删除Purescript npm安装程序的所有依赖项,当天发布了新版本,将恶意代码剔除。

npm包,本是为了方便管理而诞生,但若这其中出现各中安全风险,对用户来说得不偿失。

万幸的是,这次的恶意代码仅是为了阻止程序安装完成,但若是有人恶意更深,蓄意破坏程序或者窃取用户隐私及财产呢?

这是很大的安全隐患。

根据Garrood的说法,安装程序最初是由日本开发商Shinnosuke Watanabe开发和维护的。

PureScript维护人员与Watanabe就安装程序的维护问题存在分歧,并要求Watanabe将项目的维护权让渡出来。

Garrood表示,Watanabe“很不情愿”地让渡了,而7月5日推出的0.13.2版PureScript是维护人员接管以来发出的第一个版本,就是这里出了问题。

可事到如今,罪魁祸首是谁还是一笔糊涂账。没有明确的证据能证明Watanabe的账户是否被劫持,也可能是一名开发者因为个人分歧而蓄意篡改。

事后,npm也作出了回应,表示已经删除了恶意代码也发布了预防策略,但未提及其他。

最近一段时间,软件包管理工具频频被黑客篡改。

本月初,Rubygems包遭到劫持,6月,npm软件包中的一个漏洞被用来窃取加密货币。去年11月,月下载量千万的event-stream npm包被黑客篡改,对用户财产造成了潜在影响。

还安全吗?

据npm官方发布的安全性调查显示,77%的受访者担忧OSS/第三方代码的安全性,这也是Purescript npm安装程序泄露后,引发得最多的讨论。

网友hombre_fatal表示,包管理系统中包含不合格的包名称是一件非常讨厌的事,很是让人困惑。

创建者将其命名成“@shinn/Purescript”,而编辑器开发人员在创建时命名为“@whatever/Purescript”就好了,这样可以避免很多麻烦。

也有网友表示,问题其实出在JavaScript程序Balkanization中。rate-map包基本上是一行代码:start + val * (end - start)。

也有人对npm的依赖项管理网络的弊端产生了质疑:

一是不能管理软件包,否则friction将大大减缓生态系统;

二是在大部分时间都不能删除/禁用软件包,因为依赖项不会是严格不变的;

三是不能禁用子依赖项,否则不利于代码重新使用,增加冗余和包的复杂性。

上述三点,目前还是无解。

也有网友表示,软件包的可靠性应该靠相应社区的人进行保护。如果某个社区无法保护它的包不被恶意攻击,debian的用户将无法阻止它。

你怎么看?

传送门

Harry Garrood的声明:https://harry.garrood.me/blog/malicious-code-in-Purescript-npm-installer/

Hackernews讨论区:https://news.ycombinator.com/item?id=20549457

声明:本文来自量子位,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。