🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

引言

好久不見,我是 @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,並以正規權限重新發布已更改的套件。這一過程在數小時內可能影響幾千個專案。

惡意軟體行為

  • 利用在執行 npm install 或 update 時觸發的生命週期鉤子。
  • 濫用正規工具 TruffleHog,收集和驗證開發者終端和 CI/CD 上的認證資訊(如 GitHub 令牌、雲端憑證、API 金鑰等)。
  • 從 AWS/GCP/Azure 的元資料 API 中奪取額外權限。
  • 為了整理竊取的認證資訊,創建一個名為 “Shai-Hulud” 的 GitHub 倉庫,並進一步濫用 GitHub Actions 以維持數據外洩或後門持續性。

影響範圍與風險

  • 擔心 CrowdStrike 旗下的 npm 帳號及 Google Gemini CLI 等依賴套件受到影響。
  • 目前並未發現對原始源代碼或主要基礎的直接侵入。
  • 但若 CI/CD 管道或生產伺服器遭感染,可能造成機密資訊外洩、不當權限使用及後門安裝等嚴重風險。
  • 根據攻擊活動的特徵,推測與過去以 npm 為目標的 S1ngularity/nx 同一團隊所為。

建議對策

  • 檢查依賴套件與 lock 檔案,審核可疑更改或倉庫創建。
  • 全面輪換 CI/CD 及管理員憑證。
  • 鎖定信任的版本依賴,並考慮使用私人 npm 註冊表。
  • 強制實施 Pull Request 審查,導入提交及依賴的強制掃描,以徹底加強 SDLC 的安全性。
  • 文章中已公開受害套件的清單,開發者需立即檢查及更新。

對策

建議的對策雖為抽象說明,但也將趁此機會提及具體的對策。
針對此次攻擊,安全專業公司 Aikido 已提供專用套件。

主要特徵與功能

  • 在執行 npm 或 yarn 等主要套件管理器的命令前,進行惡意軟體檢查。
  • 檢查基於 Aikido Intel 的開源威脅情報。
  • 若檢測到惡意軟體,則預設阻止安裝並結束命令,也可設置要求用戶許可的模式。
  • 支援 bash、zsh、fish、PowerShell 等多種 Shell,實現無縫操作環境。
  • 支援 Node.js 18 以上版本。

安裝與使用方式

  1. 使用 npm 全域安裝 Aikido Safe Chain 套件。
    npm install -g @aikidosec/safe-chain
  2. 執行以下命令以設定 Shell 整合。
    safe-chain setup
  3. ❗為了開始使用 Aikido Safe Chain,請重新啟動終端機。
    此步驟對於確保 npm、npx、yarn、pnpm、pnpx 的 Shell 別名正確讀取至關重要。如不重新啟動終端機,將無法使用別名。
  4. 執行以下命令以確認安裝。
    npm install safe-chain-test

    輸出應顯示該套件因被標記為惡意軟體而被 Aikido Safe Chain 阻止安裝。

當執行 npm 或 npx、yarn、pnpm、pnpx 命令時,Aikido Safe Chain 將自動檢查正在安裝的套件是否含有惡意軟體。如檢測到惡意軟體,將顯示提示信息要求結束命令。

惡意軟體檢測時的提示信息

$ npm install safe-chain-test
✖ 檢測到惡意更改:
 - [email protected]

未安裝惡意套件而退出。

CI/CD 整合

  • 也支持在 CI/CD 環境中使用,協助構建安全的開發管道。

卸載

  • 按照刪除別名 → 套件卸載 → 重新啟動終端的步驟,可輕鬆卸載。

重要性

此次對策的重要性在於持續檢查 lock 檔案中沒有感染套件,而由於 Shai-Hulud 的自我增殖特性,感染套件未來有擴大風險,無法僅依一次檢查而安心,因此需要定期審核。故在問題平息前,必須使用 safe-chain 等可靠的惡意軟體檢測工具。這將有助於早期發現擴大損害的情況並迅速響應。

結尾

2025 年的 npm 供應鏈攻擊「Shai-Hulud」是對 JavaScript 開發基礎的重大威脅。開發者必須嚴格管理依賴套件及保護認證資訊,以求及早應對。此事件讓我們再次認識到確保軟體供應鏈安全的重要性。

一句話

最近,我換了會計師,哈哈。


原文出處:https://qiita.com/___nix___/items/6bf6801ca350d7e2eb9e


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝21   💬9   ❤️4
595
🥈
我愛JS
📝4   💬13   ❤️7
258
🥉
御魂
💬1  
3
#4
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付