好久不見,我是 @nix。
npm 套件作為 JavaScript/Node.js 開發中不可或缺的可重用元件,廣泛應用於前端到伺服器端。能夠有效地共享共通處理的機制,成為支撐開發速度和生態系統擴展的基礎。
支撐 npm 生態系統的多個熱門套件在 2025 年 9 月成為發動大規模供應鏈攻擊「Shai-Hulud」的目標。攻擊者透過盜取管理員帳號,將自我增殖型惡意軟體植入超過 187 個 npm 套件,透過依賴關係快速擴大受害範圍。
超過 187 種著名的 npm 套件(如:@ctrl/tinycolor、ngx-toastr、angulartics2)遭到劫持,感染了自我增殖型惡意軟體「Shai-Hulud」。
攻擊從多個 npm 管理員帳號被侵入開始,受感染的套件嵌入了包含 bundle.js 等惡意代碼,透過依賴關係和權限以蠕蟲型方式擴散。
在感染過程中修改 package.json,並以正規權限重新發布已更改的套件。這一過程在數小時內可能影響幾千個專案。
S1ngularity/nx
同一團隊所為。建議的對策雖為抽象說明,但也將趁此機會提及具體的對策。
針對此次攻擊,安全專業公司 Aikido 已提供專用套件。
npm install -g @aikidosec/safe-chain
safe-chain setup
npm install safe-chain-test
輸出應顯示該套件因被標記為惡意軟體而被 Aikido Safe Chain 阻止安裝。
當執行 npm 或 npx、yarn、pnpm、pnpx 命令時,Aikido Safe Chain 將自動檢查正在安裝的套件是否含有惡意軟體。如檢測到惡意軟體,將顯示提示信息要求結束命令。
惡意軟體檢測時的提示信息
$ npm install safe-chain-test
✖ 檢測到惡意更改:
- [email protected]
未安裝惡意套件而退出。
此次對策的重要性在於持續檢查 lock 檔案中沒有感染套件,而由於 Shai-Hulud 的自我增殖特性,感染套件未來有擴大風險,無法僅依一次檢查而安心,因此需要定期審核。故在問題平息前,必須使用 safe-chain
等可靠的惡意軟體檢測工具。這將有助於早期發現擴大損害的情況並迅速響應。
2025 年的 npm 供應鏈攻擊「Shai-Hulud」是對 JavaScript 開發基礎的重大威脅。開發者必須嚴格管理依賴套件及保護認證資訊,以求及早應對。此事件讓我們再次認識到確保軟體供應鏈安全的重要性。
最近,我換了會計師,哈哈。