TanStack NPM 供應鏈攻擊:Mini Shai-Hulud 活動以孤立 commit 竊取 OIDC Token,84 個套件被植入憑證竊取器
Socket Threat Research · 2026-05-11
2026-05-11 UTC 19:20 起,Socket 威脅研究團隊偵測到 TanStack 命名空間下 84 個 npm 套件遭受植入,攻擊者透過 GitHub Actions OIDC 聯邦機制竊取發布令牌,在受影響版本中注入約 2.3 MB 的重度混淆憑證竊取器。TanStack 維護者 Tanner Linsley 已公開確認,並啟動緊急撤版程序。
漏洞機制:孤立 commit 觸發 OIDC Token 洩漏
攻擊者利用一個孤立 commit(orphaned commit)觸發了儲存 OIDC Token 的 workflow 執行,繞過了 TanStack 既有的發布保護機制。GitHub Actions 的 OIDC 聯邦設計用於無密碼發布(passwordless npm publishing),workflow 可以向 npm 換取有效的發布令牌而不需要儲存靜態憑證——攻擊者正是利用這個機制,無需入侵傳統帳號即可取得發布能力。
受影響套件
84 個套件涵蓋 TanStack 命名空間的主要產品,包括:
@tanstack/react-router@1.169.5與1.169.8(每週下載量超過 1,200 萬)@tanstack/router-core@1.169.5與1.169.8@tanstack/vue-router@1.169.5與1.169.8
另有 37 個不相關命名空間(@uipath、@beproduct、@dirigible-ai 等)透過同樣機制遭到植入,顯示這是 Mini Shai-Hulud 活動的多目標攻擊。
惡意酬載技術細節
主惡意模組 router_init.js 約 2.3 MB,採用 javascript-obfuscator 模式重度混淆,內含 2,864 個 dispatcher 函式呼叫遮蔽字串常數,並有一層 XOR 解碼層包含 148 個編碼環境變數存取。憑證竊取目標涵蓋:
- GitHub Actions:Repository secrets、OIDC tokens(含分頁 API 呼叫)
- AWS:IMDSv2 Token 取得、EC2 metadata service、Secrets Manager、SSM Parameter Store
- Kubernetes:
/var/run/secrets/kubernetes.io/serviceaccount/服務帳號 Token、in-cluster Vault - HashiCorp Vault:直接從環境變數取得 Token
滲漏通道刻意偽裝:憑證透過 Session 去中心化 P2P 網路傳遞,所有流量外觀為端對端加密訊息協議,目的地為 filev2.getsession[.]org,傳統網路過濾規則難以直接識別。
持久化與蠕蟲傳播
惡意模組寫入 .claude/router_runtime.js 並修改 .claude/settings.json 掛鉤 Claude Code tool 事件、注入 .vscode/tasks.json 實現 VS Code task 自動執行。蠕蟲傳播機制透過從 GitHub Actions 取得 OIDC JWT、換取 npm 發布 Token、封裝含惡意模組的 .tgz、以 latest dist-tag 發布,並以 createCommitOnBranch GraphQL mutation 將自身寫入維護者倉庫,偽造提交者為 claude@users.noreply.github.com。
修補與緩解
- 確認
router_init.jsSHA256 為ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c(有效版本) - 優先輪換:npm tokens → GitHub PATs/OIDC trusts → AWS 憑證 → Vault tokens → K8s 服務帳號 Token
- 稽核
.claude/與.vscode/目錄是否有注入檔案 - 搜尋 git 歷史中提交者為
claude@users.noreply.github.com的非正當 commit - 在網路邊界封鎖
filev2.getsession[.]org出站流量 - 收緊 GitHub Actions OIDC Token 作用域