緣起
這兩天姑裂,一個被廣泛應用的javascript第三方庫“event-steram”爆出被人植入惡意代碼,能夠竊取到用戶的錢包信息,造成財產(chǎn)(虛擬貨幣)受損犹菱。
爆出的鏈接在這里朗儒;360安全團隊對于此次漏洞的分析做出了分析颊乘。(源碼分析那部分其實沒說太明白,至少我是沒看懂醉锄。乏悄。)
總的來說,這個漏洞主要針對的是國外一款熱錢包應用恳不,對其他項目不會有太大影響檩小。但一想到自己的項目里有這么個“病毒”存在,心里總感覺別扭烟勋,所以還是盡早清除為妙规求。
檢測本地代碼是否有此漏洞
第一步,全局搜索flatmap-stream
卵惦,找到哪些項目中使用到了
sudo find / -name flatmap-stream
如果你本地沒有項目用到這個庫阻肿,那么恭喜你沒有被感染;如果你搜索結(jié)果里顯示有項目用到了沮尿,就需要進行下面的第二步了丛塌。
第二步,進入該項目目錄下,列出event-stream
和flatmap-stream
的版本號
remix-ide$ npm ls event-stream flatmap-stream
remix-ide@0.7.5 /Users/Franklin/Documents/blockchain/code/ethereum/remix-ide
└─┬ npm-run-all@4.1.3
└─┬ ps-tree@1.1.0
└─┬ event-stream@3.3.6
└── flatmap-stream@0.1.1
如果event-stream
的版本號是3.3.6赴邻,并且flatmap-stream
的版本號是0.1.1印衔,那就說明是已經(jīng)被感染了。
修復方法
這個漏洞在爆出來之后姥敛,大多數(shù)依賴event-stream
的庫的作者当编,都做了緊急修復,因此可以重裝一下看看是否已經(jīng)被修復了:先手動刪除node_modules
目錄(如果有package-lock.json徒溪,也需要刪除)忿偷,用npm install
重新安裝;再用npm ls
查看一下版本號是否已經(jīng)變了臊泌。如果沒變鲤桥,說明庫的作者未做修復,此時只能自己手動修改了:打開對應庫的package.json
文件渠概,把event-stream
的版本號顯式指定為一個早先沒有漏洞的茶凳,比如3.3.4。
// 以ps-tree為例播揪,原代碼:
"dependencies": {
"event-stream": "~3.3.0"
},
// 修改成:
"dependencies": {
"event-stream": "3.3.4"
},
注意贮喧,package-lock.json文件內(nèi)的版本號也需要同步修改一下。
最后執(zhí)行npm install
猪狈。
多說兩句
這個漏洞的一個重要的危害是:你并不知道你使用的第三方庫里是不是引用了有漏洞的版本箱沦。所以會造成麻煩:每引入新的庫都要重復上面的檢測和修復的方法。
我一直覺得js的npm包管理方式太過開放太過簡單粗暴雇庙,之前就出過left-pad
的作者怒刪在npm上的庫谓形,造成眾多依賴的項目無法工作,知乎鏈接疆前。
這次又出了這么嚴重的漏洞寒跳。npm作者確實是應該考慮一下升級安全方面的機制了。