// 威脅簡報
TanStack npm 供應鏈入侵(Mini Shai-Hulud):發布流程被劫持,42 個 @tanstack 套件被植入竊取憑證的惡意程式
- CVSS
- 9.6 CRITICAL
- CISA KEV
- 2026-05-27
- 弱點類型
- CWE-506
人工審稿 2026-09-23指令測試:未提供漏洞重現:未進行驗證紀錄 ↓
攻擊者劫持 TanStack 的 GitHub 發布流程,以官方身分在 42 個 @tanstack/* npm 套件發布 84 個會竊取憑證的惡意版本;已列入 CISA KEV。
| 誰會中 | 2026-05-11 安裝過受影響版本 TanStack Router / Start 相關 npm 套件的開發者電腦與 CI 執行環境,或 lockfile 鎖定了這些版本的專案。Query、Table、Form 等其他 TanStack 函式庫不受影響。 |
|---|---|
| 後果 | 安裝時惡意程式自動執行,竊取 AWS、GCP、Kubernetes、Vault、GitHub、npm 與 SSH 等憑證,並嘗試用偷來的權限感染受害者維護的其他套件。研究人員另回報它會在 AI 與開發工具設定中留下後門,撤銷被盜 token 時可能刪除家目錄。 |
| 現在該做什麼 | 把受影響套件升級到事件後發布的版本,檢查 lockfile;若 5 月 11 日曾安裝受影響版本,先移除後門或隔離機器,再輪替該機器能存取的所有憑證。查看依據(4)
|
| 受影響版本 | 42 個 @tanstack/* 套件,每個被發布兩個惡意版本(例如 @tanstack/react-router 1.169.5 與 1.169.8);GitHub Advisory Database 也逐一列出這 84 個版本,完整清單見內文查看依據(3)
|
| 修好的版本 | 事件後發布的版本(例如 @tanstack/react-router 1.169.9 以上);TanStack 表示目前所有已發布版本皆安全查看依據(2)
|
| CVSS 向量 | 顯示完整向量CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H |
| 時間點 | |
| CISA KEV | 已列入(2026-05-27),代表已有實際攻擊案例查看依據(4)
|
藍隊應對手冊
確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。
- 01在 lockfile 中搜尋受影響版本
對照內文的版本表,檢查 package-lock.json、pnpm-lock.yaml 或 yarn.lock 中的 @tanstack/* 版本。TanStack 公告與 GitHub Advisory Database 都逐一列出每個套件的兩個惡意版本。
唯讀查詢grep -nE '"?@tanstack/[a-z0-9-]+' package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null - 02找出官方公告列出的注入痕跡
官方建議:檢查 package.json 是否有意料之外的 @tanstack/setup optionalDependencies,以及未宣告的 router_init.js。要檢視套件內容時用 npm pack,不要執行安裝腳本。
唯讀查詢grep -rn --include=package.json -e '@tanstack/setup' -e 'router_init.js' . 2>/dev/null - 03檢查 AI 與開發工具設定中的後門(第三方回報)
StepSecurity、Wiz、CSA 回報:檢查 .claude/settings.json 的 SessionStart 掛鉤、.vscode/tasks.json 的資料夾開啟工作,以及 macOS ~/Library/LaunchAgents/com.user.gh-token-monitor.plist 或 Linux ~/.config/systemd/user/gh-token-monitor.service;也檢查作者為 claude@users.noreply.github.com 的可疑 commit。
- 04檢查雲端稽核紀錄
官方建議:稽核在事件期間執行過安裝的 CI 執行環境,並檢查安裝後雲端稽核紀錄中的可疑活動。
- 01升級到事件後發布的版本
例如 @tanstack/react-router 1.169.9 以上;各套件的第一個安全版本見內文表格。npm 已在當天移除惡意版本。
唯讀查詢npm ls --all 2>/dev/null | grep '@tanstack/' - 02暫時停用安裝腳本
官方公告的暫時防禦措施,讓套件在安裝時無法自動執行程式。可能影響需要安裝腳本的正常套件。
會變更環境npm config set ignore-scripts true
- 01先移除後門或隔離機器,再撤銷 token
安全機構(非 TanStack)建議:先移除 gh-token-monitor 服務與 .claude、.vscode 掛鉤,或把機器隔離,否則撤銷 token 可能觸發刪除家目錄。TanStack 公告本身沒有提到這個順序。
- 02輪替安裝主機能存取的所有憑證
TanStack 建議:5 月 11 日安裝過受影響版本者,輪替 AWS、GCP、Kubernetes、Vault、GitHub、npm 與 SSH 憑證。
- 03檢查自己維護的套件是否被重新發布
惡意程式會用偷來的權限重新發布受害者維護的套件;檢查近期發布紀錄,並還原作者為 claude@users.noreply.github.com 的可疑 commit(CSA 建議)。
- 01不要讓外部 PR 程式碼以主程式庫權限執行
TanStack 已移除 pull_request_target、加上程式庫擁有者檢查,並正導入 zizmor 檢查工具與 .github 的 CODEOWNERS 規則。
- 02發布流程不共用快取,Actions 釘選到 commit SHA
TanStack 已停用發布流程的 pnpm 快取、清除所有快取,並把 Actions 釘選到 commit SHA。
- 03收緊 npm Trusted Publishing
CSA 建議只允許受保護分支上的發布流程發布;TanStack 也要求 npm 與 GitHub 使用非簡訊的兩步驟驗證。
- 04為新版本設定安裝冷卻期
這批惡意版本只上線數十分鐘到數小時;延後安裝剛發布的版本(例如 pnpm 11 的功能)可以避開這類事件。另監控 AI 工具設定資料夾的變動(CSA 建議)。
完整修復步驟與說明
- 升級。 把受影響套件更新到事件後發布的版本(見上表第一個安全版本),並重新產生 lockfile。
- 暫時停用安裝腳本。 官方公告的暫時防禦:
npm config set ignore-scripts true。可能影響需要安裝腳本的正常套件。 - 檢查是否中招。 官方建議:在 lockfile 中搜尋上表版本;檢查
package.json是否有意料之外的@tanstack/setupoptionalDependencies;尋找未宣告的router_init.js。要檢視套件內容時用npm pack,不要執行安裝腳本。官方公告列出的外傳網域為filev2.getsession.org與seed1–seed3.getsession.org,可在網路紀錄中搜尋。 - 如果中招:先清後門,再撤銷 token。 安全機構(不是 TanStack)建議:先移除
gh-token-monitor服務(macOS:~/Library/LaunchAgents/com.user.gh-token-monitor.plist;Linux:~/.config/systemd/user/gh-token-monitor.service)以及.claude/settings.json、.vscode/tasks.json中的掛鉤,或先把機器隔離,再撤銷 token,否則可能觸發刪除資料。TanStack 公告本身沒有提到這個順序。 - 輪替憑證。 TanStack 建議:5 月 11 日安裝過受影響版本者,輪替那台機器能存取的所有 AWS、GCP、Kubernetes、Vault、GitHub、npm 與 SSH 憑證;稽核當時執行安裝的 CI 環境,並檢查雲端稽核紀錄。也要還原作者為
claude@users.noreply.github.com的可疑 commit(CSA 建議)。 - 長期強化(TanStack 已採用): 移除
pull_request_target並加上程式庫擁有者檢查;發布流程停用 pnpm 快取並清除所有快取;Actions 釘選到 commit SHA;npm 與 GitHub 要求非簡訊的兩步驟驗證;改用 pnpm 11 的新版本安裝冷卻期;導入 zizmor 檢查工具與.github的 CODEOWNERS 規則(進行中)。CSA 另建議把 npm Trusted Publishing 限制在受保護分支的發布流程,並監控 AI 工具設定資料夾的變動。
攻擊流程
從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
- 攻擊者
從改名過的分叉程式庫(fork)送出 Pull Request
攻擊者建立自己的分叉程式庫(fork),並刻意改名,讓它不容易在 fork 清單中被找到,再送出 PR。TanStack 一個由 pull_request_target 觸發的工作流程,會以主程式庫的權限執行外部 fork 的程式碼,而且第一次貢獻的人不需核准。
防禦: 不要在 pull_request_target 中執行外部 PR 的程式碼;要求首次貢獻者經過核准。
- 外部
污染 GitHub Actions 快取
這次執行可以寫入 Actions 快取(pnpm 套件儲存區)。之後主程式庫的正式發布流程沿用了這份被污染的快取。
防禦: 發布流程停用快取,並清除所有既有 Actions 快取。
- 外部
從記憶體取出 OIDC token,直接發布到 npm
被污染的程式在發布過程中讀取執行環境的記憶體,取得可發布到 npm 的短效 OIDC token,在約 6 分鐘內發布 84 個惡意版本。因為來自真正的流程,套件帶有有效的 SLSA 來源證明與 Sigstore 簽章。
防禦: 限制 npm Trusted Publishing 只允許受保護分支上的發布流程;記得來源證明不等於內容安全。
- 你的系統
受害者安裝套件,惡意程式自動執行
惡意版本透過 optionalDependencies 與安裝階段腳本,在 npm install 時自動執行約 2.3 MB 的混淆程式 router_init.js。
防禦: 升級到事件後的版本;暫時設定 ignore-scripts;使用 lockfile 與新版本安裝冷卻期。
- 你的系統
竊取憑證並自我擴散
偷取雲端、Kubernetes、Vault、GitHub、npm 與 SSH 憑證,經 Session 通訊網路外傳,再列出受害者維護的其他套件並以同樣手法重新發布。
防禦: 輪替安裝主機能存取的所有憑證;CI 只給最小權限。
- 你的系統
留下後門,撤銷 token 時可能刪除資料
研究機構回報:在 Claude Code 與 VS Code 設定中加入開啟時自動執行的掛鉤,並安裝 gh-token-monitor 背景服務;若偵測到被盜 token 遭撤銷,會刪除家目錄(觸發細節各家說法不同)。
防禦: 先移除後門或隔離機器,再撤銷 token。
影響範圍
這不是 TanStack 程式碼本身的錯誤。攻擊者控制了 TanStack 的發布流程,以 TanStack 的名義把惡意程式放進 npm 套件。真正承擔風險的,是安裝了惡意版本的人。
| 條件 | 是否受影響 |
|---|---|
| 2026-05-11 在開發電腦或 CI 上安裝過下表的惡意版本 | 受影響,需依「修復建議」處理 |
| lockfile 鎖定了下表的惡意版本 | 可能受影響;npm 已移除這些版本,但仍要檢查是否曾經安裝 |
| 只用 TanStack Query、Table、Form、Virtual、Store 等其他函式庫 | 不受影響(只有 TanStack/router 程式庫的 Router 與 Start 套件受影響) |
| 目前安裝的是事件後發布的版本 | 安全;TanStack 表示目前所有已發布版本皆安全 |
版本說明: TanStack 的公告說每個套件剛好被發布兩個惡意版本(例如 @tanstack/react-router 1.169.5 與 1.169.8),84 個版本 / 42 個套件的數字也吻合。GitHub Advisory Database 也逐一列出同樣的 84 個版本,兩者一致。下表列出每個套件的兩個惡意版本與第一個安全版本(套件名稱皆省略 @tanstack/ 前綴):
| 套件 | 惡意版本 | 第一個安全版本 |
|---|---|---|
| react-router、vue-router、solid-router、router-core | 1.169.5、1.169.8 | 1.169.9 |
| history、eslint-plugin-router | 1.161.9、1.161.12 | 1.161.13 |
| router-cli | 1.166.46、1.166.49 | 1.166.50 |
| router-generator | 1.166.45、1.166.48 | 1.166.49 |
| router-plugin | 1.167.38、1.167.41 | 1.167.42 |
| router-utils | 1.161.11、1.161.14 | 1.161.15 |
| router-vite-plugin | 1.166.53、1.166.56 | 1.166.57 |
| router-devtools、react-router-devtools、vue-router-devtools、solid-router-devtools | 1.166.16、1.166.19 | 1.166.20 |
| router-devtools-core | 1.167.6、1.167.9 | 1.167.10 |
| router-ssr-query-core | 1.168.3、1.168.6 | 1.168.7 |
| react-router-ssr-query、vue-router-ssr-query、solid-router-ssr-query | 1.166.15、1.166.18 | 1.166.19 |
| virtual-file-routes | 1.161.10、1.161.13 | 1.161.14 |
| react-start | 1.167.68、1.167.71 | 1.167.72 |
| react-start-client | 1.166.51、1.166.54 | 1.166.55 |
| react-start-server | 1.166.55、1.166.58 | 1.166.59 |
| react-start-rsc | 0.0.47、0.0.50 | 0.0.51 |
| solid-start | 1.167.65、1.167.68 | 1.167.69 |
| solid-start-client | 1.166.50、1.166.53 | 1.166.54 |
| solid-start-server | 1.166.54、1.166.57 | 1.166.58 |
| vue-start | 1.167.61、1.167.64 | 1.167.65 |
| vue-start-client | 1.166.46、1.166.49 | 1.166.50 |
| vue-start-server | 1.166.50、1.166.53 | 1.166.54 |
| start-client-core | 1.168.5、1.168.8 | 1.168.9 |
| start-server-core | 1.167.33、1.167.36 | 1.167.37 |
| start-plugin-core | 1.169.23、1.169.26 | 1.169.27 |
| start-fn-stubs | 1.161.9、1.161.12 | 1.161.13 |
| start-static-server-functions | 1.166.44、1.166.47 | 1.166.48 |
| start-storage-context | 1.166.38、1.166.41 | 1.166.42 |
| eslint-plugin-start | 0.0.4、0.0.7 | 0.0.8 |
| nitro-v2-vite-plugin | 1.154.12、1.154.15 | 1.154.16 |
| zod-adapter、valibot-adapter、arktype-adapter | 1.166.12、1.166.15 | 1.166.16 |
曝險時間: TanStack 表示惡意版本上線後 20 到 26 分鐘就被發現;21:03 UTC 前 84 個版本全部標為棄用,npm 在 22:13 到 23:55 UTC 之間移除了套件檔。惡意版本的下載次數未能確認。
原理
TanStack 的事後檢討說明,攻擊者串聯了 GitHub Actions 設定中的三個弱點:
- 「Pwn Request」。 一個由
pull_request_target觸發的工作流程,會用主程式庫的權限執行外部 fork 送來的 PR 程式碼,而且第一次貢獻的人不需要核准。攻擊者先建立自己的分叉程式庫(fork)並刻意改名,讓它不容易在 fork 清單中被找到,再從它送出 PR。 - 快取污染。 這次執行可以寫入 GitHub Actions 快取(pnpm 套件儲存區)。之後主程式庫的正式發布流程沿用了這份被污染的快取。
- OIDC token 竊取。 在正式發布時,被污染的程式讀取執行環境的記憶體,取出可發布到 npm 的短效 OIDC token,直接發布惡意版本,繞過正常的發布步驟。TanStack 表示沒有 npm token 被盜,發布流程本身也沒有被改動。
因為套件確實出自 TanStack 的流程,它們帶有有效的 SLSA Build Level 3 來源證明與 Sigstore 簽章。StepSecurity 指出,來源證明只能證明「哪條流程產生了它」,不能證明流程照原本的意圖運作。
有問題的思路(概念示意,不是 TanStack 的原始設定):
展開程式碼範例(yaml)
# 以主程式庫權限執行,卻拿外部 PR 的程式碼來跑
on: pull_request_target
steps:
- checkout: 外部 PR 的程式碼
- run: 安裝相依套件並執行(可寫入共用快取)
# 正式發布流程之後讀取同一份快取,並擁有 npm 發布權限修好的思路:
展開程式碼範例(yaml)
# 外部 PR 用沒有機密、唯讀的 pull_request 觸發
on: pull_request
permissions: read-all
# 正式發布流程:只在受保護分支執行、不使用快取、Actions 釘選 commit SHA,
# 只有這個工作能取得 npm 發布用的 OIDC token惡意程式做了什麼: 惡意版本透過 optionalDependencies 與安裝階段腳本,在 npm install 時自動執行約 2.3 MB 的混淆程式 router_init.js。TanStack 確認它會竊取 AWS(執行個體中繼資料與 Secrets Manager)、GCP 中繼資料、Kubernetes 服務帳號 token、Vault token、~/.npmrc、GitHub token 與 SSH 金鑰,經 Session/Oxen 通訊網路外傳,並用受害者的權限重新發布他維護的其他套件。
以下是研究機構(StepSecurity、Wiz、Snyk、CSA)回報,TanStack 的事後檢討沒有描述:
- 在 Claude Code 的
.claude/settings.json加入 SessionStart 掛鉤、在 VS Code 的.vscode/tasks.json加入開啟資料夾時執行的工作,讓惡意程式在工具開啟時再次執行;另安裝gh-token-monitor背景服務。 - 撤銷被盜 token 時刪除家目錄的「死手開關」。TanStack 的後續文章確認有這個機制,但觸發細節各家說法不同:Wiz 說背景程式每 60 秒向 GitHub 檢查 token 是否被撤銷;StepSecurity 描述的是建立 npm token 時附上「撤銷就會清除電腦」的警告說明。
- Wiz 另回報惡意程式在俄語系統上會停止執行;而
gh-token-monitor這個背景程式啟動 24 小時後會自動結束(只是這個背景程式結束,不代表整個感染或已被偷走的憑證就沒事了)。 - 研究機構也回報以
claude@users.noreply.github.com為作者的 GitHub commit,用來混入 AI 代理的提交紀錄。
時間軸
| 日期(UTC) | 事件 |
|---|---|
| 2026-05-10 17:16 | 攻擊者建立改名過的分叉程式庫(fork)zblgg/configuration |
| 2026-05-10 23:29 | 惡意 commit 加入該 fork |
| 2026-05-11 約 10:49 | 開啟 PR #7378 |
| 2026-05-11 11:29 | 被污染的快取(約 1.1 GB)存入 |
| 2026-05-11 19:15/19:20–19:26 | 惡意發布(事後檢討的工作流程時間為 19:15–19:26;公告與 CVE 的發布時間為 19:20–19:26) |
| 2026-05-11 19:46 | StepSecurity 研究人員在 issue #7383 回報 |
| 2026-05-11 20:19 / 21:03 | 首批版本棄用 / 84 個版本全部棄用 |
| 2026-05-11 20:50 | CVE 編號保留 |
| 2026-05-11 22:13–23:55 | npm 移除套件檔 |
| 2026-05-11 | GitHub 安全公告發布 |
| 2026-05-12 00:12 | CVE 公開(NVD 顯示 01:16) |
| 2026-05-12(05-15 更新) | TanStack 發布強化措施後續文章 |
| 2026-05-27 | 列入 CISA KEV,聯邦機關期限 2026-06-10 |
| 2026-06-08 / 06-17 / 08-04 | GHSA / NVD / CVE 紀錄最後更新 |
延伸閱讀
- 評分: CVSS 3.1 9.6 由 GitHub(CNA)評定,NVD 列為「次要」分數;未找到 NVD 自己的評分。「需要使用者互動」反映受害者必須自己安裝套件。
- CWE 差異: GitHub、CVE 紀錄與 NVD 都標為 CWE-506(內嵌惡意程式碼);CISA KEV 的 CWE 欄位為空,並稱之為「未指明的漏洞」。
- 勒索軟體標記: KEV 標示「已知用於勒索軟體活動」。Snyk 說 TeamPCP 與 Vect 勒索軟體集團有合作紀錄,CSA 說該集團有加密貨幣竊取與勒索軟體背景,SecurityWeek 則沒有提到勒索軟體。KEV 欄位本身不說明標記理由,所以 CISA 的依據未能確認;本頁不主張勒索軟體透過此事件部署。
- 更大的攻擊活動: 「Mini Shai-Hulud」的名稱與對 TeamPCP 的歸因來自 StepSecurity、Wiz、Snyk 與 CSA,TanStack 的事後檢討沒有命名。研究機構回報同一天還有約 65 個 UiPath npm 套件、Mistral AI(npm 與 PyPI
mistralai@2.4.6)、guardrails-ai@0.10.1、OpenSearch JS 用戶端與 Squawk 套件受害,更早在 4 月底有 SAP 相關套件的一波。整波規模各家不同:CSA 為 169 個 npm 與 2 個 PyPI 套件、373 筆惡意項目;SecurityWeek 為五小時內至少 401 個成品、170 個以上套件;Snyk 約 170 個套件。CVE-2026-45321 只涵蓋 42 個 TanStack 套件;其他受害者是否都經由 TanStack 感染,未能確認。 - AI 開發工具的關聯: 後門藏在 Claude Code 與 VS Code 的設定資料夾,這些資料夾常被 git 忽略、很少被檢查;假冒的「claude」commit 作者用來混入 AI 代理的提交。
- CISA 同批列入的其他項目: CISA 在 2026-05-27 的公告中同時把三個項目列入 KEV:Daemon Tools Lite(CVE-2026-8398)、TanStack(本頁)與 Nx Console VS Code 擴充套件(CVE-2026-48027)。三者都是惡意程式被放進正式發布版本的事件。
- Shai-Hulud 的由來: 2025 年 9 月,第一波名為「Shai-Hulud」的 npm 蠕蟲竊取開發者的憑證,再用偷來的 npm 權限把惡意程式發布到受害者的其他套件,CISA 當時發布警示,指出超過 500 個套件受害。2026 年的「Mini Shai-Hulud」各波(4 月底的 SAP 套件、本頁的 TanStack)沿用同樣的自我擴散手法,研究機構歸因於 TeamPCP,是否與 2025 年的攻擊者相同未能確認。
- 相關弱點類型:CWE-506;GitHub Actions 的
pull_request_target風險與快取污染。
驗證紀錄 已人工審稿、核對來源;尚未在我們的環境重現
| 人工審稿 | 2026-09-23 |
|---|
驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.
來源
- 安全公告Malware in 42 @tanstack/* packages exfiltrates cloud credentials, GitHub tokens, and SSH keys (GHSA-g7cv-rxg3-hmpx) · TanStack (GitHub), 2026-05-11 · 查閱 2026-09-23
- 安全公告GHSA-g7cv-rxg3-hmpx (GitHub Advisory Database) · GitHub, 2026-05-11 · 查閱 2026-09-23
- 安全公告CVE-2026-45321 CVE record · CVE Program / GitHub CNA, 2026-05-12 · 查閱 2026-09-23
- CVE / NVD / OSVCVE-2026-45321 NVD API record · NIST NVD, 2026-05-12 · 查閱 2026-09-23
- 安全公告CISA Adds Three Known Exploited Vulnerabilities to Catalog · CISA, 2026-05-27 · 查閱 2026-09-23
- 安全公告Widespread Supply Chain Compromise Impacting npm Ecosystem · CISA, 2025-09-23 · 查閱 2026-09-23Shai-Hulud 第一波(2025 年 9 月)的背景資料。
- 廠商說明Postmortem: TanStack npm supply-chain compromise · TanStack, 2026-05-11 · 查閱 2026-09-23
- 廠商說明Hardening TanStack After the npm Compromise · TanStack, 2026-05-12 · 查閱 2026-09-23
- 其他Several npm latest releases were compromised · Issue #7383 · TanStack (GitHub), 2026-05-11 · 查閱 2026-09-23
- 研究文章TeamPCP's Mini Shai-Hulud Is Back: A Self-Spreading Supply Chain Attack Compromises TanStack npm Packages · StepSecurity, 2026-05-11 · 查閱 2026-09-23
- 研究文章Mini Shai-Hulud Strikes Again: TanStack + more npm Packages Compromised · Wiz, 2026-05-11 · 查閱 2026-09-23
- 研究文章TanStack npm Packages Hit by Mini Shai-Hulud · Snyk, 2026-05-11 · 查閱 2026-09-23
- 研究文章Mini Shai-Hulud: TeamPCP Worm Targets AI Developer Toolchain · Cloud Security Alliance, 2026-05-18 · 查閱 2026-09-23
- 研究文章Supply Chain Campaign Targets SAP npm Packages with Credential-Stealing Malware · Wiz, 2026-04-29 · 查閱 2026-09-23
- 新聞報導TanStack, Mistral AI, UiPath Hit in Fresh Supply Chain Attack · SecurityWeek, 2026-05-12 · 查閱 2026-09-23
媒體簡報
一句話
TanStack 是廣受使用的開源 JavaScript 函式庫。2026 年 5 月 11 日,攻擊者利用它在 GitHub 上自動化流程的三個設定弱點,以 TanStack 的正式身分在 42 個 npm 套件發布了 84 個會竊取開發者憑證的惡意版本。惡意版本在數小時內被下架,但當天安裝過的人需要輪替憑證。美國 CISA 已在 5 月 27 日將此事件列入已知遭利用漏洞清單。
關鍵數字
- 嚴重度
- CVSS 3.1 9.6(GitHub 評分,NVD 列為次要來源) services.nvd.nist.gov
- 受影響規模
- 42 個套件、84 個惡意版本 github.com
- 惡意發布時間
- 2026-05-11 約 19:20–19:26 UTC github.com
- 列入 CISA KEV
- 2026-05-27(聯邦機關期限 2026-06-10) services.nvd.nist.gov
- 弱點類型
- CWE-506(內嵌惡意程式碼) github.com
已確認
- 攻擊者串聯 TanStack GitHub Actions 的三個弱點,以正式身分發布了含竊取憑證程式的套件。
- 只有 Router 與 Start 相關套件受影響;TanStack 表示沒有 npm token 被盜。
- npm 在當天移除了惡意版本,TanStack 表示目前所有已發布版本皆安全。
- CISA 已於 2026-05-27 列入已知遭利用漏洞清單。
尚未確認 / 說法不一
- CISA 標示「已知用於勒索軟體活動」的理由(KEV 欄位不說明理由);沒有證據顯示勒索軟體透過此事件部署。
- 撤銷 token 即刪除資料的確切觸發條件,各研究機構說法不同,TanStack 只確認有此機制。
- 惡意版本的下載次數,以及同日其他套件受害是否都經由 TanStack 擴散。
可引用的一句話
這次的套件有正確的簽章,也真的來自 TanStack 的流程;問題是流程本身已經被動了手腳。
圖片
引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.
TanStack npm 供應鏈入侵(Mini Shai-Hulud):發布流程被劫持,42 個 @tanstack 套件被植入竊取憑證的惡意程式 TanStack 是廣受使用的開源 JavaScript 函式庫。2026 年 5 月 11 日,攻擊者利用它在 GitHub 上自動化流程的三個設定弱點,以 TanStack 的正式身分在 42 個 npm 套件發布了 84 個會竊取開發者憑證的惡意版本。惡意版本在數小時內被下架,但當天安裝過的人需要輪替憑證。美國 CISA 已在 5 月 27 日將此事件列入已知遭利用漏洞清單。 關鍵數字: - 嚴重度:CVSS 3.1 9.6(GitHub 評分,NVD 列為次要來源)(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-45321) - 受影響規模:42 個套件、84 個惡意版本(https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx) - 惡意發布時間:2026-05-11 約 19:20–19:26 UTC(https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx) - 列入 CISA KEV:2026-05-27(聯邦機關期限 2026-06-10)(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-45321) - 弱點類型:CWE-506(內嵌惡意程式碼)(https://github.com/advisories/GHSA-g7cv-rxg3-hmpx) 已確認: - 攻擊者串聯 TanStack GitHub Actions 的三個弱點,以正式身分發布了含竊取憑證程式的套件。 - 只有 Router 與 Start 相關套件受影響;TanStack 表示沒有 npm token 被盜。 - npm 在當天移除了惡意版本,TanStack 表示目前所有已發布版本皆安全。 - CISA 已於 2026-05-27 列入已知遭利用漏洞清單。 尚未確認 / 說法不一: - CISA 標示「已知用於勒索軟體活動」的理由(KEV 欄位不說明理由);沒有證據顯示勒索軟體透過此事件部署。 - 撤銷 token 即刪除資料的確切觸發條件,各研究機構說法不同,TanStack 只確認有此機制。 - 惡意版本的下載次數,以及同日其他套件受害是否都經由 TanStack 擴散。 「這次的套件有正確的簽章,也真的來自 TanStack 的流程;問題是流程本身已經被動了手腳。」— PlainCVE https://plaincve.date/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise
如何引用本頁
本文採 CC BY 4.0,轉載請保留署名與連結。
PlainCVE 團隊(2026)。《TanStack npm 供應鏈入侵(Mini Shai-Hulud):發布流程被劫持,42 個 @tanstack 套件被植入竊取憑證的惡意程式》。PlainCVE。https://plaincve.date/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise(查閱日期:YYYY-MM-DD)BibTeX
@misc{cve202645321tanstacknpmsupplychaincompromise2026,
title = {TanStack npm 供應鏈入侵(Mini Shai-Hulud):發布流程被劫持,42 個 @tanstack 套件被植入竊取憑證的惡意程式},
author = {PlainCVE 團隊},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise},
note = {更新於 2026-09-24}
}