這是一起典型的 npm 供應鏈攻擊事件。攻擊者透過污染 @joyfill 命名空間下的兩個 Beta 版本套件,將惡意程式碼植入其中。對於開發者來說,最危險的地方在於,這次的攻擊並不依賴 npm 常見的 lifecycle hook(例如 install 腳本),而是在 Node.js 載入套件的瞬間就直接觸發。
這意味著只要你的程式碼中寫了 require 或 import 這些受影響的套件,惡意程式就會立即在你的開發環境或伺服器上執行。
區塊鏈作為指令控制中心 C2
傳統的惡意軟體通常會連接到一個固定的 IP 或域名來接收指令(這稱為 C2,Command and Control),但這種方式很容易被防火牆或安全監控系統攔截並封鎖。
這次的攻擊者採取了極其狡猾的手段:他們將區塊鏈(包含 Tron, Aptos, BNB Smart Chain)當作指令分發平台。惡意程式會去查詢區塊鏈上的交易紀錄,從交易雜湊(Transaction Hash)中解密並提取真正的惡意 JavaScript 程式碼。
這種做法帶來兩個極大威脅。首先,區塊鏈是去中心化的,安全人員無法像封鎖單一 IP 那樣輕易關閉這個指令通道。其次,攻擊者不需要重新發布 npm 套件版本,只要在區塊鏈上發起一筆新交易,就能隨時更換下發的惡意載荷(Payload)。
雙軌並行的植入機制
該惡意程式在執行時會分岔成兩條路徑,確保攻擊成功率:
第一條路徑是在目前的 Node.js 進程中執行。它透過區塊鏈解析出一個名為 clientCode 的載荷,這是一個功能強大的 RAT(Remote Access Trojan,遠端存取木馬)。RAT 允許攻擊者遠端控制你的電腦,執行任意指令、上傳下載檔案,甚至讀取你的剪貼簿內容。
第二條路徑則是啟動一個獨立的 Node.js 子進程。這個進程會嘗試從特定的 IP 地址下載另一套載荷(可能是 Python 寫的 OmniStealer 資訊竊取軟體)。因為它是獨立進程,即使你執行完 npm build 或測試指令後終端機關閉了,這個後台進程依然可能在系統中持續運行。
針對開發者的精準打擊
這次攻擊的核心目標顯然是開發者。該木馬具有高度的隱蔽性,它會檢查主機名稱,如果發現自己運行在 GitHub Runner、Buildbot 或 WSL2 等 CI/CD 環境或沙箱中,它會選擇不執行,以避免被安全研究人員或自動化掃描工具發現。
一旦在真正的開發機上運行,它會瘋狂收集以下敏感資訊: Windows 憑證管理員與 Linux Secret Service 的儲存資料。 瀏覽器(Chrome, Firefox)的 Cookie 與儲存空間,特別是加密貨幣錢包與密碼管理器的擴充功能。 Git 憑證、GitHub CLI 配置以及 VS Code 的儲存資料。
實務建議與防禦
這次事件被認為與北韓背景的威脅組織有關,且與之前的 ViteVenom 攻擊手法高度相似。對於工程師來說,這提醒我們不能盲目信任任何 npm 套件,即使是 Beta 版本。
如果你發現專案中使用了 @joyfill/[email protected] 或 @joyfill/[email protected],請立即採取以下行動: 從 lockfile、快取、內部鏡像以及所有建置映像檔中移除這些版本。 將套件版本固定在已驗證的安全版本。 最重要的一點:假設你的開發環境已經被入侵,立即輪換(Rotate)所有可能外洩的金鑰、API Token 和密碼。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。