知名開源框架 TanStack 遭「Mini Shai-Hulud」供應鏈攻擊,開源安全風險受關注

知名開源框架 TanStack 遭駭客組織 TeamPCP 發動「Mini Shai-Hulud」大規模供應鏈攻擊,於數分鐘內發布 84 個惡意版本。此攻擊首次具備有效 SLSA 第 3 級來源證明,並透過串聯外部 PR 觸發、快取中毒與 OIDC Token 提取三項弱點成功滲透。惡意程式碼已擴散至 170 多個 npm 與 PyPI 套件,導致 OpenAI 等企業內部遭入侵,並透過 P2P 機制隱蔽外洩憑證。

事件說明

知名網頁應用程式框架 TanStack 的 npm 套件近期遭受駭客組織 TeamPCP 發動名為「Mini Shai-Hulud」的大規模軟體供應鏈攻擊。攻擊者在短短幾分鐘內發布了 42 個「@tanstack/*」套件的 84 個惡意版本 [1]。本次攻擊的惡意套件具備歷史性的技術突破,首次擁有有效的 SLSA(軟體供應鏈安全框架)第 3 級來源證明,使其外觀與合法套件幾乎無異 [2]。攻擊者利用串聯三個獨立弱點的方式繞過安全防護,導致惡意軟體迅速擴散至 Mistral AI、UiPath 與 OpenSearch 等 170 多個 npm 與 PyPI 套件,甚至造成 OpenAI 內部員工裝置遭入侵及部分原始碼專案庫遭未經授權存取 [1]。

技術分析

根據 TanStack 官方發布的事後檢討報告,此次攻擊成功的根本原因在於駭客將三個獨立弱點串聯,且這三項弱點「缺一不可」 [1]。

第一項弱點:外部 Pull Request 觸發與快取中毒。駭客向主專案庫提交外部 PR,觸發使用「pull_request_target」條件的「bundle-size.yml」工作流程。該工作流程在主專案庫環境下檢出並執行外部程式碼,使不受信任的程式碼接觸主專案庫資源 [1]。雖然官方設定唯讀權限,但 GitHub Actions 的快取機制在寫入時使用執行器內部 Token,不受唯讀限制;且快取範圍為專案庫共享,導致外部 PR 程式碼能越權竄改並污染主專案庫的快取資料 [1]。駭客在 PR 中夾帶惡意腳本「vite_setup.mjs」,將惡意資料寫入 pnpm 儲存目錄,並使用與官方發布流程(release.yml)相同的快取金鑰 [1]。

第二項弱點:低權限測試與高權限發布共用快取。當 PR 建置測試任務結束後,含惡意程式的資料被寫入 GitHub Actions 共用快取 [1]。當專案合併其他程式碼至主分支並觸發「release.yml」發布流程時,「設定工具」步驟會自動載入並還原該快取檔案,使惡意內容進入具有高信任權限的發布流程 [1]。

第三項弱點:OIDC Token 權限濫用與環境隔離不足。官方「release.yml」流程宣告「id-token: write」權限以透過 OIDC 綁定在 npm 發布套件,但此權限遭駭客濫用 [1]。當被投毒的快取在執行器上還原,駭客潛伏的惡意二進制檔案在建置步驟中被觸發。這些程式會主動尋找 GitHub Actions 執行器的工作處理程序,讀取記憶體配置並直接提取動態生成的 OIDC Token [1]。取得 Token 後,惡意程式越權直接向 npm 註冊表發送 POST 請求發布惡意套件,完全繞過官方工作流程中的「發布套件」步驟 [1]。

影響範圍

此次供應鏈攻擊影響範圍極大,導致跨領域開源生態系淪陷。包含每週下載量破千萬的「@tanstack/react-router」在內的 42 個套件受害 [1]。惡意軟體具備自我傳播能力,入侵開發者裝置後會自動搜尋並利用受害者權限發布其他套件,使災情擴大至「@mistralai」、「@uipath」、「@opensearch-project」等超過 170 個專案 [1]。

感染後,名為「router_init.js」的惡意酬載會進行大範圍憑證竊取,全面搜刮 CI/CD 環境與開發者本機的機敏資料,包括環境變數、配置檔案及雲端憑證 [1]。這些資料未傳送至傳統 C2 惡意中繼站,而是隱蔽地透過點對點(P2P)資料外洩,經由去中心化的 Session 通訊網路進行端到端加密傳輸,使流量偽裝成一般通訊軟體遙測數據 [1]。更具威脅的是,該惡意軟體內建系統刪除機制,會持續監控遭竊的 GitHub Token 有效狀態;若偵測到 Token 已遭撤銷,便會立即觸發系統指令,將受害者的主目錄資料刪除 [1]。

防護建議

TWCERT/CC 呼籲開發團隊與企業立即檢視內部專案,並採取以下應變措施:

  • 清查受害範圍:立即檢查專案的 lockfile 與 CI 日誌,確認是否安裝受影響或遭竄改的版本套件 [1]。
  • 優先清除常駐程式:在撤銷任何外洩的 Token 之前,務必先檢查 macOS 或 Linux 系統中是否存在「gh-token-monitor」常駐程式並將其移除,以避免觸發惡意軟體的資料刪除機制 [1]。
  • 全面更換機敏憑證:立即更換可能曝險在受感染環境中的所有憑證,包含 GitHub/npm Token、雲端供應商憑證、SSH 金鑰等 [1]。
  • 強化 CI/CD 與 OIDC 工作流程:嚴格審查 GitHub Actions,避免在處理來源不明或不受信任的 Pull Request 時使用「pull_request_target」作為觸發條件,並禁止此類工作流程具備寫入快取的權限;落實 OIDC Token 的最小權限原則 [1]。
  • 勿單一依賴 SLSA 證明:具備 SLSA 來源證明的套件亦可能含有惡意程式碼。建議結合安裝時的行為監控與套件發布時間緩衝期(Cooldowns)機制 [1]。

5 步驟修補清單

  1. 立即檢查專案 lockfile 與 CI 日誌,確認是否安裝受影響的「@tanstack/*」套件版本。
  2. 在撤銷 Token 前,先檢查並移除 macOS/Linux 系統中的「gh-token-monitor」常駐程式。
  3. 全面更換所有可能曝險的憑證,包括 GitHub、npm、雲端供應商及 SSH 金鑰。
  4. 審查 GitHub Actions 工作流程,移除「pull_request_target」觸發條件並禁止寫入快取權限。
  5. 導入行為監控與套件發布緩衝期機制,不單獨依賴 SLSA 證明作為套件可信依據。

參考資料

  • TWCERT News: 知名網頁應用程式框架 TanStack 的 npm 套件近期遭到駭客組織 TeamPCP 發動名為「Mini Shai-Hulud」的大規模軟體供應鏈攻擊
  • How the TanStack and RubyGems Supply Chain Attacks Worked
  • A Self-Spreading Supply Chain Attack Compromises TanStack npm Packages
  • Our response to the TanStack npm supply chain attack - OpenAI

更多資安新聞