https://www.informationsecurity.com.tw/seminar/2026_chtsecurity/

新聞

Mini Shai-Hulud 惡意蠕蟲再起:169 個 npm 套件淪陷,首度記錄成功偽造有效 SLSA 出處證明

2026 / 05 / 12
編輯部
Mini Shai-Hulud 惡意蠕蟲再起:169 個 npm 套件淪陷,首度記錄成功偽造有效 SLSA 出處證明
資安研究人員近期揭露,威脅行為者 TeamPCP 發動新一波大規模軟體供應鏈攻擊,代號「Mini Shai-Hulud」的惡意蠕蟲已蔓延至 169 個 npm套件、共 373 個惡意版本,受害範圍涵蓋 TanStack、UiPath、Mistral AI、OpenSearch、Guardrails AI 等知名開源專案。研究機構 Aikido Security、StepSecurity、Socket 及 Endor Labs 均已發出警報,此波攻擊是今年 4 月 SAP 套件事件的延伸,但規模更廣,受害生態系橫跨多個主流開源命名空間。

從 SAP 到全面爆發:蠕蟲的演化軌跡

Mini Shai-Hulud 最初於今年 4 月現身,當時主要針對 SAP 相關 npm 套件,採用 setup.mjs 與 execution.js 組合執行惡意酬載。此波新攻擊在技術手法上有所進化:受感染的 TanStack 套件在套件根目錄植入混淆過的 JavaScript 檔案 router_init.js,並新增指向 GitHub 託管套件的可選相依性(optional dependency)@tanstack/setup,其中內含 prepare 腳本,藉由 npm 在安裝 Git 相依套件時自動執行生命週期腳本的機制,於開發者毫無察覺的情況下在背景靜默執行惡意程式。

酬載一旦觸發,隨即針對 CI/CD(持續整合/持續部署)環境與開發者機器展開全面憑證竊取,目標包括 GitHub Token、npm Token、GitHub Actions OIDC Token、AWS 雲端憑證、Kubernetes 服務帳號、HashiCorp Vault Token 及各類環境變數與本地機密檔案。竊得的資料透過 Session Protocol 基礎設施外洩至 filev2.getsession[.]org,並以備援方式透過 GitHub GraphQL API 提交至攻擊者控制的儲存庫。

蠕蟲特性:以受害者身分感染下一個目標

此波攻擊最令研究人員警惕的,是蠕蟲的自我傳播能力。惡意酬載竊取憑證後,會進一步搜尋受害者可發布的 npm 套件,修改套件壓縮檔後注入惡意相依套件,再以受害者身分發布含毒新版本。如此一來,每一個受害的維護者都可能成為下一波感染的源頭。

StepSecurity 研究員 Ashish Kurmi 指出:「攻擊者透過專案自身的 GitHub Actions 發布流程,利用被劫持的 OIDC Token 發布了惡意版本。」TanStack 官方隨後追溯確認,攻擊鏈涉及 pull_request_target 觸發器、GitHub Actions 快取投毒(cache poisoning),以及從 GitHub Actions Runner 執行期記憶體中擷取 OIDC Token 三個環節,並強調「未有 npm Token 遭竊,npm 發布工作流程本身並未被入侵」。此次事件已獲分配漏洞識別碼 CVE-2026-45321,通用漏洞評分系統(CVSS)評分高達 9.6,屬於嚴重等級,影響 TanStack 生態系共 42 個套件、84 個版本。

有效 SLSA 出處證明紀錄不應被視為套件安全的依據

Kurmi 進一步揭露:「受感染套件攜帶有效的 SLSA(軟體產品鏈層級)Build Level 3 出處證明,這是史上首個被記錄到可產出合法認證惡意套件的 npm 蠕蟲。

SLSA Build Level 3 出處證明本被視為供應鏈安全的重要防線,旨在確認套件確實由特定 GitHub Actions 工作流程構建並發布。然而此次攻擊清楚說明:當攻擊者控制的程式碼在工作流程內部執行時,工作流程本身的 OIDC 權限即可被用於產生合法的發布 Token,進而發布附有真實出處證明的惡意套件。換言之,出處證明只能告訴你套件從哪裡構建,無法證明構建過程本身是安全的。

受波及套件與應對措施

此波攻擊範圍橫跨 npm 與 PyPI雙大套件庫。PyPI 方面,guardrails-ai 的惡意程式碼於套件匯入時即立刻執行;mistralai 多個版本則被植入針對特定地理區域的破壞性邏輯。npm 方面,受波及範疇涵蓋 @tanstack、@uipath、@squawk、@tallyui、@mistralai 等命名空間共逾百個套件版本,詳細清單可參閱各研究機構原始公告。

對於確認有受影響版本在開發機或 CI Runner 上執行的組織,研究人員建議立即採取以下措施:輪換 npm Token、GitHub Personal Access Token及 GitHub Actions 密鑰、稽核雲端憑證與 Kubernetes 服務帳號、審查近期 npm 發布紀錄與 GitHub Actions 執行日誌,並在日誌中搜尋 router_init.js、tanstack_runner.js 及 @tanstack/setup 等入侵指標。此外,研究人員亦提醒,有效的 SLSA 出處證明紀錄不應被視為套件安全的最終依據。