千萬下載量開源軟體託管給陌生人 植入惡意程式碼竊取使用者密幣
0x00 事件背景
2018年11月21日,名為 FallingSnow的使用者在知名JavaScript應用庫event-stream在github Issuse中釋出了針對植入的惡意程式碼的疑問,表示event-stream中存在用於竊取使用者數字錢包的惡意程式碼。
360-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埠上,目前npm官網已經下架處理。
在實際生產應用中,event-stream庫屬於一個跨平臺的應用,影響面會比較廣泛。
360-CERT建議相關使用者,特別是網際網路企業,應該針對自身IDC線上、研發、辦公網環境進行安全評估。
0x01 影響範圍
Event-Stream 3.3.6版本
這是一個非常受歡迎的JavaScript庫,在npm.org儲存庫上每週下載量超過200萬。
惡意依賴已經存在了2.5個月內未被發現。
9月1日至今已被下載2225w次
npm 已經將惡意的Flatmap-Stream進行下架處理,已經無法從npm中再進行相關的安裝,以減小影響。
但已經安裝的Event-Stream請及時處理,很有可能已經在遭受影響。
360CERT判斷此次事件的影響範圍大,危害等級高。建議廣大使用者及時根據修復建議進行修復和自查。
0x02 修復建議
可以通過如下方式對自己所使用的event-stream進行檢測
$ npm ls event-stream flatmap-stream ... [email protected] ...
可以對event-stream進行降級版本到3.3.4以緩解此事件帶來的影響
降級方式如下
npm install [email protected]
再通過上述命令可以檢查是否降級成功
360CERT將在CERT官網隨後給出收影響package的相關統計,敬請期待。
0x03 程式碼分析
根據flatmap-stream/package.json匯出的main
"main": "index.min.js",
在這其中有一段index.js所沒有的額外程式碼
這段程式碼的主要作用翻譯如下
解密的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
0x04 時間線
2018-11-21 @FallingSnow在專案Issue中提出問題
2018-11-27 360CERT釋出預警報告
2018-11-27 360CERT釋出分析報告