GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權

SLLAQZX發表於2018-11-27

前兩天比特幣暴跌的訊息讓投資者們無不捶胸頓足,但屋漏偏逢連夜雨,最近國外又有網友曝光,event-stream庫存在惡意程式碼,其主要目的就是竊取使用者數字錢包裡包括比特幣在內的數字貨幣。


事件被證實後,儘管npm官網已對其進行下架處理,但由於實際生產應用中,event-stream庫屬於一個跨平臺的應用,其影響會比較廣泛,所以360-CERT建議相關使用者,特別是網際網路相關的企業,應該針對自身IDC線上環境、辦公網環境進行安全評估。


此外,如果你是 vue 開發者,請務必檢查一下自己的專案;如果不是,也不能掉以輕心,因為很多流行模組比如 nodemon、npm-run-all、ps-tree 也都受到了影響。


回顧事件始末:


2018年11月21日,一位名為 FallingSnow的使用者在github Issuse上對知名JavaScript應用庫event-stream進行了質疑。原因是event-stream 包突然多出了一個名為 flatmap-stream 的依賴項,而這個依賴項卻包含有竊取使用者數字錢包的惡意程式碼。


從該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版本

GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


event-stream是一個非常受歡迎的JavaScript庫,在npm.org儲存庫上每週下載量超過200萬。所以,這一惡意依賴在2.5個月內都未被發現,其所造成的惡意影響可想而知,9月1日至今已被下載2225w次。


GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


npm 已經將惡意的Flatmap-Stream進行下架處理,已經無法從npm中再進行相關的安裝,以減小影響。


但已經安裝的Event-Stream請及時處理,很有可能已經在遭受影響。


此次事件的影響範圍大,危害等級高。建議廣大使用者及時根據修復建議進行修復和自查。


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以緩解此事件帶來的影響


降級方式如下

npminstallevent-stream@3.3.4


再通過上述命令可以檢查是否降級成功


GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


360CERT將在CERT官網隨後給出受影響package的相關統計,敬請期待。



 程式碼分析


根據flatmap-stream/package.json匯出的main

"main": "index.min.js",

GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


在這其中有一段index.js所沒有的額外程式碼


process["env"]["npm_package_description"];的獲取測試


GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權

這段程式碼的主要作用翻譯如下


GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


解密的n[0] 


GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


解密的n[1] 


GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


其中


GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權


惡意程式碼主要作用 通過重新覆蓋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

2.      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

3.      I don't know what to say. · Issue #116 · dominictarr/event-stream

https://github.com/dominictarr/event-stream/issues/116

4.      add flat map · dominictarr/event-stream@e316336

https://github.com/dominictarr/event-stream/commit/e3163361fed01384c986b9b4c18feb1fc42b8285

5.      npm-stat: event-stream

https://npm-stat.com/charts.html?package=event-stream&from=2018-09-01&to=2018-11-27



相關文章