量子位 出品 | 公众号 QbitAI
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
— 完 —
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ’ᴗ’ ի 追踪AI技术和产品新动态
“