惡意 npm 包篡改本地 "ethers" 庫以發(fā)起反向 Shell 攻擊
網(wǎng)絡(luò)安全研究人員在npm注冊表中發(fā)現(xiàn)兩個惡意軟件包,這些軟件包專門感染本地安裝的其他程序包,這標志著針對開源生態(tài)系統(tǒng)的軟件供應(yīng)鏈攻擊持續(xù)升級。
惡意包偽裝與感染機制
涉事的兩個軟件包分別為ethers-provider2和ethers-providerz。其中ethers-provider2自2025年3月15日發(fā)布以來已被下載73次,而第二個軟件包可能已被惡意軟件作者自行刪除,未產(chǎn)生任何下載記錄。
ReversingLabs研究員Lucija Valenti?在向The Hacker News提供的報告中表示:"這些是簡單的下載器,但其惡意載荷被巧妙隱藏。真正有趣的是它們的第二階段行為——會'修補'本地安裝的正版npm包ethers,用包含惡意載荷的新文件替換原文件。這個被篡改的文件最終會建立反向Shell連接。"
難以清除的持久化威脅
這一發(fā)展標志著威脅行為者戰(zhàn)術(shù)的新升級,因為即使卸載惡意軟件包,受感染機器仍無法清除惡意功能,因為修改已植入流行庫中。更嚴重的是,如果用戶在ethers-provider2仍存在于系統(tǒng)時卸載ethers包,后續(xù)重新安裝該包時將面臨再次感染的風險。
ReversingLabs對ethers-provider2的分析顯示,它實質(zhì)上是廣泛使用的ssh2 npm包的木馬化版本,其install.js中包含惡意載荷,用于從遠程服務(wù)器("5.199.166[.]1:31337/install")獲取第二階段惡意軟件,寫入臨時文件并執(zhí)行。執(zhí)行后立即刪除臨時文件以消除痕跡。
多階段攻擊鏈分析
第二階段載荷啟動無限循環(huán)檢查本地是否安裝ethers npm包。若檢測到該包存在或新安裝,就會立即行動,將名為"provider-jsonrpc.js"的文件替換為包含額外代碼的偽造版本,這些代碼會從同一服務(wù)器獲取并執(zhí)行第三階段載荷。新下載的載荷作為反向Shell,通過SSH連接到攻擊者的服務(wù)器。
Valenti?指出:"這意味著當客戶端收到服務(wù)器的特定消息時,建立的連接就會轉(zhuǎn)變?yōu)榉聪騍hell。即使從受感染系統(tǒng)中刪除ethers-provider2包,該客戶端仍會在特定情況下被使用,為攻擊者提供一定程度的持久性。"
需要特別說明的是,npm注冊表中的官方ethers包并未被入侵,所有惡意修改都是在本地安裝后進行的。
同源攻擊變體
第二個軟件包ethers-providerz行為類似,試圖修改與本地安裝的"@ethersproject/providers"npm包相關(guān)的文件。雖然具體目標文件尚不明確,但源代碼引用表明可能是loader.js。
這些發(fā)現(xiàn)凸顯了威脅行為者在開發(fā)者系統(tǒng)中傳播和維持惡意軟件的新手段,強調(diào)必須在使用前仔細檢查開源倉庫中的軟件包。Valenti?警告稱:"盡管下載量較低,但這些軟件包功能強大且惡意。若攻擊得逞,將破壞本地安裝的ethers包,即使卸載該包也能在受感染系統(tǒng)中保持持久性。"