JavaScript公共库被植入恶意代码 360发布紧急预警

看点 作者:360SRC 2018-11-27 12:38:23
前两天比特币暴跌的消息让投资者们无不捶胸顿足,但屋漏偏逢连夜雨,最近国外又有网友曝光,event-stream库存在恶意代码,其主要目的就是窃取用户数字钱包里包括比特币在内的数字货币。 事件被证实后,尽管npm官网已对其进行下架处理,但由于实际生产应用中,event-stream库属于一个跨平台的应用,其影响会比较广泛,所以360-CERT建议相关用户,特别是互联网相关的企业,应该针对自身IDC线上环境、办公网环境进行安全评估。 此外,如果你是 vue 开发者,请务必检查一下自己的项目;如果不是,也不能掉以轻心,因为很多流行模块比如 nodemon、npm-run-all、ps-tree 也都受到了影响。 360-CERT带你回顾事件始末: 2018年11月21日,一位名为 FallingSnow的用户在github Issuse上对知名JavaScript应用库event-stream进行了质疑。原因是event-stream 包突然多出了一个名为 flatmap-stream 的依赖项,而这个依赖项却包含有窃取用户数字钱包的恶意代码。
  • CERT从该Issuse中得知,大约三个月前,由于缺乏时间和兴趣,event-stream原作者dominictarr将其开发交给另一位名为@Right9ctrl的程序员。但Right9ctrl却在接管了此模块后,发布了包含新依赖关系的Event-Stream 3.3.6 -Flatmap-Stream0.1.1。 其中,Flatmap-Stream v0.1.1 正是是包含恶意代码的npm package。
据分析,该package中的恶意代码主要会窃取用户的钱包信息和私钥,并将其发送到copayapi.host的8080端口上。

影响范围

  Event-Stream 3.3.6版本 event-stream是一个非常受欢迎的JavaScript库,在npm.org存储库上每周下载量超过200万。所以,这一恶意依赖在2.5个月内都未被发现,其所造成的恶意影响可想而知,9月1日至今已被下载2225w次。 npm 已经将恶意的Flatmap-Stream进行下架处理,已经无法从npm中再进行相关的安装,以减小影响。 但已经安装的Event-Stream请及时处理,很有可能已经在遭受影响。 360CERT判断此次事件的影响范围大,危害等级高。建议广大用户及时根据修复建议进行修复和自查。 Copay官方作出确认5.0.2-5.1.0的Copay和Bitpay受影响。 在实际的代码分析中发现,受影响的第二个关键还在于npm项目的description字段是否为A Secure Bitcoin Wallet。 而目前只在bitpay/copay项目发现满足该条件。

修复建议

  可以通过如下方式对自己所使用的event-stream进行检测 $ npm ls event-stream flatmap-stream...flatmap-stream@0.1.1... 可以对event-stream进行降级版本到3.3.4以缓解此事件带来的影响 降级方式如下 npm install event-stream@3.3.4 再通过上述命令可以检查是否降级成功 360CERT将在CERT官网随后给出受影响package的相关统计,敬请期待。

 代码分析

根据flatmap-stream/package.json导出的main "main": "index.min.js", 在这其中有一段index.js所没有的额外代码 process["env"]["npm_package_description"];的获取测试 这段代码的主要作用翻译如下 解密的n[0] 解密的n[1] 其中 恶意代码主要作用 通过重新覆盖bitcore-wallet-client/lib/credentials.js中getKeysFunc方法进行信息的发送 所使用的信息如下: 发送信息所使用的公钥 "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxoV1GvDc2FUsJnrAqR4C\nDXUs/peqJu00casTfH442yVFkMwV59egxxpTPQ1YJxnQEIhiGte6KrzDYCrdeBfj\nBOEFEze8aeGn9FOxUeXYWNeiASyS6Q77NSQVk1LW+/BiGud7b77Fwfq372fUuEIk\n2P/pUHRoXkBymLWF1nf0L7RIE7ZLhoEBi2dEIP05qGf6BJLHPNbPZkG4grTDv762\nPDBMwQsCKQcpKDXw/6c8gl5e2XM7wXhVhI2ppfoj36oCqpQrkuFIOL2SAaIewDZz\nLlapGCf2c2QdrQiRkY8LiUYKdsV2XsfHPb327Pv3Q246yULww00uOMl/cJ/x76To\n2wIDAQAB\n-----END PUBLIC KEY-----"; 发送信息的地址(写死的域名和ip) 域名 copayapi.host IP 111.90.151.134

 时间线

2018-11-21 @FallingSnow在项目Issue中提出问题 2018-11-27 360CERT发布预警报告 2018-11-27 360CERT发布分析报告

参考链接

  1. 黑客植入后门在流行的JavaScript库进行比特币资金窃取
https://www.zdnet.com/article/hacker-backdoors-popular-javascript-library-to-steal-bitcoin-funds/#ftag=RSSbaffb68
  1. Malicious code found in npm package event-stream downloaded 8 million times in the past 2.5 months | Snyk
https://snyk.io/blog/malicious-code-found-in-npm-package-event-stream
  1. I don't know what to say. Issue #116 · dominictarr/event-stream
https://github.com/dominictarr/event-stream/issues/116
  1. add flat map dominictarr/event-stream@e316336
https://github.com/dominictarr/event-stream/commit/e3163361fed01384c986b9b4c18feb1fc42b8285
  1. npm-stat: event-stream
https://npm-stat.com/charts.html?package=event-stream&from=2018-09-01&to=2018-11-27      

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接