转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
【年末促销】葡萄城 2018 岁末福利火热放送中
原文转载自 微信公众号 justjavac
ESLint事件回顾:
2018年7月12日,全球最大的面向开源及私有软件项目的托管平台GitHub对外宣称,一名黑客入侵了ESLint
,并利用Npm账户发布了包含了恶意软件的版本3.7.2,用户在安装时,恶意代码将会自动执行,访问某个网站同时会把用户的.npmrc文件的内容发送给黑客自己,而在.npmrc文件中一般包含发布到NPM的访问令牌。
本次事件:
早起看手机,结果发现我的微信群炸了,未读消息 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)给出了一个让人哭笑不得的回复:
他发邮件给我,说他想维护这个模块,于是我把模块所有权移交给了他。我没有从这个模块得到任何回报,而且我已经好久不使用这个模块了,大概有好几年了吧。
而且:我已经没有发布这个模块的权限了。
作者已经把这个模块移交给了黑客。
$ npm owner ls event-stream
right9ctrl
从 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 也都受到了影响。
继上次ESLint被黑后,这又是一起开源社区被黑事件,这不是开源社区安全事件的第一起,但相信也不会是最后一起,谁知道下次受到安全漏洞影响的会不会是自己手里正在使用的开源工具呢?
如何杜绝此类事件的再次发生,开发者除了做好自身安全措施外,相信选择使用葡萄城成熟的商业软件:SpreadJS纯前端表格控件、WijmoJS前端开发工具包是一个更不错的选择,毕竟一家优秀的厂商会为开发者承担所有可能出现的风险这点很重要。最后,让我们祝福他们做的更好。
WijmoJS 前端开发工具包
WijmoJS 前端开发工具包由多款高效、灵活的纯前端控件组成,全面支持Angular、React、Vue、TypeScript、Knockout 和 Ionic 框架,用于快速搭建企业级桌面/移动 Web 应用程序。借助葡萄城深厚的技术底蕴,WijmoJS 为各领域用户提供更稳定、更高效的前端开发工具,帮助中国招商银行、微软、思科、特斯拉、富士通等知名企业快速搭建其 Web 应用。WijmoJS 凭借先进的触控设计、全面的框架支持、顶级的控件性能、零依赖的产品特性和易用、轻松的操作体验,全面满足前端开发所需,已成为构建企业 Web 应用程序最高效的纯前端开发工具包。
SpreadJS 纯前端表格控件
SpreadJS 是一款基于 HTML5 的纯 JavaScript 电子表格和网格功能控件,以“高速低耗、纯前端、零依赖”为产品特色,可嵌入任何操作系统,同时满足 .NET、Java、响应式 Web 应用及移动跨平台的表格数据处理和类 Excel 的表格应用开发,为用户提供更快捷、更安全、更熟悉的表格数据处理方式和更友好的类 Excel 操作体验。