這是一次典型的軟體供應鏈攻擊(Software Supply Chain Attack)。簡單來說,攻擊者不是直接攻擊你的伺服器,而是攻擊你信任的第三方工具。當你執行 npm install 安裝套件時,惡意程式就趁機進入你的開發環境。
這次受影響的是 jscrambler 套件的 8.14.0 版本。攻擊者劫持了維護者的 npm 帳號,直接將惡意版本推送到 npm 倉庫,完全繞過了 GitHub 的程式碼審核流程。
攻擊的技術路徑與運作機制
這次攻擊最危險的地方在於它利用了 npm 的 preinstall 鉤子(Hook)。這是一種在套件正式安裝前會自動執行的腳本。對於大多數開發者來說,執行 npm install 是一個習慣動作,但在此案例中,只要安裝 8.14.0 版本,惡意程式就會在背景自動執行,不需要你 import 任何模組或呼叫任何指令。
具體的執行流程如下:
首先,套件中包含了一個名為 setup.js 的載入器和一個偽裝成 JavaScript 檔案但實際上是二進位容器的 intro.js。
接著,setup.js 會偵測目前的作業系統(Windows, macOS 或 Linux),從 intro.js 中提取對應的 gzip 壓縮包提取出一個用 Rust 編寫的原生二進位檔。
最後,該檔案會被寫入系統的暫存目錄,隨機命名並賦予執行權限,隨後在背景靜默啟動。
這款 Rust 資訊竊取程式(Infostealer)的攻擊目標
這款惡意軟體是專門為開發者量身打造的。它不追求感染人數,而是追求獲取高權限的機密資訊。它會掃描並竊取以下內容:
雲端憑證:包含 AWS, Azure, Google Cloud 的金鑰,甚至包括 CI/CD 執行環境中常用的元數據端點(Metadata Endpoints)。
加密貨幣錢包:掃描 MetaMask, Phantom, Exodus 等錢包的種子碼與私鑰。
密碼管理員與瀏覽器:竊取 Bitwarden 儲存庫、瀏覽器儲存的密碼與 Cookie。
通訊軟體 Session:竊取 Discord, Slack, Telegram 與 Steam 的登入會話。
AI 開發工具配置:這是最新的攻擊目標,它會掃描 Claude Desktop, Cursor, Windsurf, VS Code 與 Zed 的設定檔,試圖奪取 API Key 以及 Model Context Protocol (MCP) 的伺服器憑證。
進階的持久化與權限獲取
為了確保能長期潛伏,該程式在不同平台上採取了不同策略:
在 Linux 上,它嘗試連結核心的 BPF 函式庫,並將 eBPF 程式載入核心。eBPF 是一種高效能的核心監控技術,一旦成功載入,攻擊者將能從核心層級掌控系統,而非僅限於使用者層級的文件存取。
在 Windows 與 macOS 上,它加入了反偵錯(Anti-debugging)檢查,防止安全研究人員分析。同時,它會建立隱藏的排程工作(Windows Task Scheduler)或啟動代理(macOS LaunchAgent),確保電腦重啟後惡意程式能自動重新啟動。
防禦限制與 npm 的對策
值得注意的是,npm 官方在 2026 年 7 月 8 日剛發佈的 npm 12 版本中,已將依賴項的安裝腳本(Install Scripts)預設設為關閉。這意味著如果你使用的是最新版的 npm 12,除非你手動同意,否則 preinstall 鉤子不會執行。但對於使用舊版 npm 客戶端的開發者,這個漏洞依然敞開。
實務處置建議
如果你或你的 CI/CD 系統在 2026 年 7 月 11 日後安裝過 jscrambler 8.14.0,請採取以下行動:
版本更新:立即升級至 8.15.0 或回退到 8.13.0。檢查 lockfile(如 package-lock.json)確保沒有 8.14.0 的殘留。
憑證輪替:將所有可能接觸到的機密視為已外洩。請立即更換雲端金鑰(Cloud Keys)、npm token、GitHub token 以及 AI 工具的 API Key。
會話失效:強制登出並撤銷 Discord, Slack, Bitwarden 等所有登入會話。
系統檢查:Windows 用戶檢查工作排程器是否有異常任務;macOS 用戶檢查 ~/Library/LaunchAgents 是否有不明的 plist 檔案。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。