Quantcast

大举报时代已经来临

别再问我新加坡哪里吃【小龙虾】!Mark这8家,随时解馋!还有免费优惠哦!

气质女神倪妮出道前太狂放,自慰拍揉奶照上传网络,冯绍峰已经解脱了,井柏然你心真大!

关于备胎芯片,华为资深员工说了实话

日益伊-斯-兰-化的中-国-西-北-危-机

Facebook Twitter

分享到微信朋友圈

点击图标下载本文截图到手机
即可分享到朋友圈。如何使用?

查看原文

可怕!月下载量 800 万的开源库被植入比特币后门

IT轻社区

NPM 成也依赖,坑也依赖!2016 年 3 月,NPM 就炸锅一次。一个 NPM 模块的开发者撤回了自己的代码,导致诸如 React 和 Babel 等大量重要项目出问题了。

现在 NPM 圈又炸锅了,因为一个广泛使用的依赖库 event-stream 在被原维护者 Dominic Tarr 转让给 right9ctrl 之后被植入了窃取比特币的后门。这意味着使用到该模块的开发者们,其设备或许早在不知情的情况下变成了挖矿设备了。

我们是怎么一步一步掉坑的?

我们都知道,event-stream 是一个用于处理 Node.js 流数据的 JavaScript npm 包,它使得创建和使用流变得容易,正是因此,它也受到了广大开发者的欢迎,目前这个库每周有 200 万的下载量,被包括财富五百强在内的大小企业使用。

然而不怕神一般的对手,就怕“小猪佩奇”一样的队友。数月前,在 GitHub 上这个库的维护者@dominictarr 因为缺乏时间和兴趣无法继续维护这个库了,于是就将该库转让给了一个完全不认识却又想要维护的陌生人@right9ctrl ,接而不少开发者的噩梦就此开始了。

@dominictarr:


(@right9ctrl)他发邮件给我,说他想维护这个模块,于是我把模块所有权移交给了他。我没有从这个模块得到任何回报,而且我已经好久不使用这个模块了,大概有好几年了吧。

今年 9 月 8 日,新维护者@right9ctrl 开始了初步性的动作,首先释出了 event-stream 3.3.6 版本的更新,并在其中加入了一个全新的模块——flatmap-stream,彼时这个模块中并没有恶意功能。

9 月 16 日,@right9ctrl 重写了代码并删除了对 flatmap-stream 的依赖,之后又推出新版本,这意味着更新不会自动升级。

10 月 5 日,flatmap-stream 0.0.1 版本被一个名为“hugeglass”的用户推送到了 NPM。而这次释出的更新中该模块就被加入了窃取比特币钱包并转移出余额的功能。

因此,自 10 月 5 日以来,任何通过 event-stream 库并使用被植入恶意代码 flatmap-stream 的开发者都可能受到恶意脚本的攻击。而据统计,自 2018 年 9 月更新以来,恶意包已下载近 800 万次。且原作者也无奈地表示,自己也没有权限去修改。


event-stream 原作者的回应

收到其他开发者的谴责后,event-stream 原作者 Dominic Tarr 在 GitHub 上发表声明做出了回应。

https://gist.github.com/dominictarr/9fd9c1024c94592bc7268d36b8d83b3a

大意如下:

使用者将维护的负担压在作者身上,而他开发这个库不是出于利他动机,是因为好玩。从开发中学习并获得乐趣,将维护交给另一个人是因为分享也是一种学习。

为什么要把这个软件包项目交给一个陌生人?

因为当它不再有趣,你从维护中得不到任何东西。一开始他并没有从 right9ctrl 身上感受到恶意,他以为这是一位真心想帮助他的人。

与其他贡献者分享 commit access/publish 权力在 node/npm 社区是很流行的。

他认为有两种方法解决这个问题:给维护者钱,或者使用者也应该承担部分维护的责任。

中招了怎么办?

目前对于开发者受到此漏洞的影响程度尚未可知,但是当前我们的首要任务还是检查自己是否使用了相关的恶意库,例如运行以下代码:

$ npm ls event-stream flatmap-stream
...
flatmap-stream@0.1.1
...

如果在输出里面包含了 flatmap-stream 则说明你也可能被攻击。

倘若确认受到了影响,接下来你首先要做的是从应用程序中删除恶意软件包,可以通过恢复到 event-stream 版本 3.3.4 来执行此操作。

此外,如果你的应用程序使用恶意库并处理了比特币,请检查在过去 3 个月内的活动,以查看是否有任何已开采或转移的比特币没有进入自己的钱包。

如果你的应用程序没有窃取到比特币但特别敏感,建议你也要检查在过去 3 个月内的活动是否有任何可疑现象,特别是在网络上发送到非预期目的地的数据。因为黑客或许没有通过代码窃取到比特币,但也有可能是在监控你的应用程序。

与此同时,对于不少网友反映的前端主流框架 Vue 的 Vue-cli 中也使用了 event-stream 这个依赖问题,今天 Vue 作者尤雨溪(微博@尤小右)在微博回应表示:

关于 npm event-stream 包的安全问题,Vue CLI 对其依赖关系仅在用 UI 终止任务时存在,已创建项目通过纯 CLI 使用的不受影响。为彻底杜绝问题,建议重装全局的 @vue/cli。


专门针对比特币的后门

这一事件之所以会在两个半月之后被发现,还是因为 flatmap-stream 中的恶意代码使用了一个在 Node 10 中被弃用的 API。GitHub 上的用户 Jayden Seri 在运行 Node 代码时发现了该警告,并在其中一个包c(https://github.com/remy/nodemon/issues/1442)上提出了疑问,该包将 flatmap-stream 作为传递依赖关系引入。

后来,加州州立大学富勒顿分校的计算机科学专业学生 Ayrton Sparling(GitHub @FallingSnow)也同样发现了这一问题,他对 event-stream 模块添加了 flatmap-stream 作为依赖项,然后包含针对另一个包 ps-tree 的注入代码。

最终发现 flatmap-stream@0.1.1 版本中的恶意代码,显然是试图从 Dash Copay 比特币钱包中窃取比特币。flatmap-stream 这个模块在 GitHub 上托管,并通过 Node 包管理器(NPM)分发,而这个恶意代码也很难被发现,因为 flatmap-stream 模块已加密,如今它于本周一被 NPM 官方从列表中删除。

据外媒 The Register 报道,新的 NPM 发言人已表示,27号上午 9 点 18 分,子依赖 flatmap-stream 被删除,并且在上午 9:30,NPM Inc.接管了 event-stream 项目的控制权。

而针对上文用户发现恶意代码试图从 Dash Copay 比特币钱包中窃取比特币一事,Copay 公司一开始否认了 Copay 开发的钱包应用在其代码中使用了 event-stream 依赖库,但是最后又承认它释出的应用包含了后门版本的 event-stream。该公司称使用 versions 5.0.2 到 5.1.0 的用户受到了后门影响。使用这些版本的用户应该假定他们的私钥已经被窃取了,需要尽可能快的升级到 5.2.0 版本。

反思

在这一事件发生后,不少网友痛批原作者@dominictarr 亲手将项目交到了黑客手中,且还没有在社区中向大家告知有关 event-stream 项目所有权变更的通知。还有一部分网友表示,开源软件许可明确表示软件作者对软件不提供保证也不承担任何责任。但值得注意的是,在开源的世界中,在原作者缺乏时间或精力的情况下,转移所有权给他人也是一种相对普遍的做法。如果真的要问责,开发者要怪也只能怪自己信任代码,只能怪黑客骗取了所有人的新任。

对此,NPM 安全主管 Adam Baldwin 也回应称:“基于我们目前尚未完成的分析,早期迹象表明这是对比特币平台的极具针对性的攻击。”正是如此有针对性的攻击,Baldwin 预计其影响将是微乎其微的。

但是整体而言,近年来,像 NPM 和其他代码存储库(如 Python 的 PyPI 和 Ruby 的 RubyGems)由于其开放性可以为许多业余开发者和缺乏资金的创业者提供很大的帮助,但是也极为容易受到攻击。尽管不断增加自动漏洞扫描和报告机制等防御措施,但对于开源软件,开发者们仍可以自由发布未经修复的代码,风险不大可能消失。

当被问及将来如何避免这种情况时,Baldwin 承认,无法维护的代码和转移代码所有权都会带来潜在的问题。他认为 NPM 社区如果为了控制且识别恶意代码以致让其他人都不能发布代码,那么将损害社区发展。

“当前需要做的是让维护人员和社区共同迅速跟进。”Baldwin 如是说。

对此,你怎么看?是否有更好的建议?欢迎下方留言分享你的看法。

来源:内容综合自CSDN + Solidot

END



往期热门文章


    Read more

    发送中

    文章有问题?点此查看未经处理的缓存