35

月下载量千万的npm包被黑客篡改,Vue开发者可能正在遭受攻击

 5 years ago
source link: https://www.secrss.com/articles/6694?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

今天早起看手机,结果发现我的微信群炸了,未读消息 999+,大家都在讨论 event-stream 事件。打开 twitter 也是被这个刷屏了。

于是翻看了一下 GitHub issue,大概知道了事情的原委。

用户 @FallingSnow 在 GitHub 上为 event-stream 仓库创建了一个 issue,标题为:"I don't know what to say.",翻译过来大概就是“我也是很无语了”。因为 event-stream 包突然多出了一个名为 flatmap-stream 的依赖项,而这个依赖项正在窃取用户的数字货币。

event-stream 被很多的前端流行框架和库使用,每月有几千万的下载量。在 Vue 的官方脚手架 vue-cli 中也使用了这个依赖,作为最流行的前端框架之一,这个影响还是挺大的。而 React 则躲过了以此影响。

flatmap-stream 中的恶意代码会扫描用户的 nodemodules 目录,因为所有从 npm 下载的模块都会放在此目录。如果发现了在 nodemodules 存在特定的模块,则将恶意代码注入进去,从而盗取用户的数字货币。

如果想查看自己的项目是否受到影响,可以运行:

$ npm ls event-stream flatmap-stream
...
[email protected]
...

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

如果使用 yarn 则可以运行:

$ yarn why flatmap-stream

根据 issue 的描述,这次事件还非常具有戏剧性,因为攻击者(@right9ctrl)在大概 3 个月前明目张胆的添加了攻击代码,并提交到了 GitHub,随后发布到了 npm。于是 @FallingSnow 在 GitHub 上询问“为什么 @right9ctrl 有这个项目的访问权限呢?”

@dominictarr Why was @right9ctrl given access to this repo? He added flatmap-stream which is entirely (1 commit to the repo but has 3 versions, the latest one removes the injection, unmaintained, created 3 months ago) an injection targeting ps-tree. 

不久这个仓库的所有者(@dominictarr)给出了一个让人哭笑不得的回复:

2eaUJve.png!web

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

而且:我已经没有发布这个模块的权限了。

作者已经把这个模块移交给了黑客。

$ npm owner ls event-stream
right9ctrl <[email protected]>

从 GitHub 的提交记录也可以看到,作者(@dominictarr)最后一次提交代码是去年 10 月。而之后黑客 @right9ctrl 也一直在维护此模块。但是在 3 个月前,黑客在 GitHub 上新建了一个 flatmap-stream 仓库(内含恶意代码),并在这个项目中引用了自己的仓库。

直到几天前这个有漏洞的仓库才被发现,然后 npm 紧急将这个含有恶意代码的 flatmap-stream 模块删除了。

这段恶意代码目前还能在 GitHub 上看到,感兴趣的可以自己去分析。攻击者还是挺有心机的。

在评论区也出现了对 @dominictarr 的指责,轻易的将一个周下载量百万级别的模块移交给了陌生人去维护。但是熟悉 @dominictarr 的人都知道,虽然 @dominictarr 不如 tj 大神那么高产,但是 @dominictarr 也维护着 400 多个 npm 包,而维护这么多包无疑花费了很多的时间和精力。

虽然我们不知道黑客(@right9ctrl)发送的邮件是如何写的,但是无容置疑的是,这封邮件使其获得了 @dominictarr 的信任,再加上 @dominictarr 已经好久不使用这个包了,因此将所有权转移给了黑客(@right9ctrl)。

而这次漏洞事件,也让我们回过头来重新反省 node.js 社区。

最后再次提醒:如果你是 vue 开发者,请务必检查一下自己的项目。即使你不是 vue 开发者,最好也检查一下,因为很多流行模块比如 nodemon、npm-run-all、ps-tree 也都受到了影响。

声明:本文来自justjavac,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如需转载,请联系原作者获取授权。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK