// 威脅簡報

CVE-2026-45321已遭實際利用

TanStack npm 供應鏈入侵(Mini Shai-Hulud):發布流程被劫持,42 個 @tanstack 套件被植入竊取憑證的惡意程式

CVSS
9.6 CRITICAL
CISA KEV
2026-05-27
弱點類型
CWE-506

PlainCVE 團隊 · 發布 2026-09-23 · 更新 2026-09-24 · AI 輔助 · 媒體簡報 ↓

人工審稿 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)
  • 廠商 / 維護者TanStack 建議:5 月 11 日安裝過受影響版本者,輪替安裝主機能存取的所有憑證we strongly recommend that anyone who installed an affected version on 2026-05-11 rotate AWS, GCP, Kubernetes, Vault, GitHub, npm, and SSH credentials reachable from the install host.tanstack.com
  • 廠商 / 維護者TanStack 的安全公告:暫時設定 ignore-scripts,停用安裝腳本Configure npm to skip lifecycle scripts on install (npm config set ignore-scripts true) as a temporary defense-in-depth measure.github.com
  • 研究團隊安全機構(不是 TanStack)建議:先移除 gh-token-monitor 後門,再撤銷 tokenSearch for the gh-token-monitor daemon on developer machines and remove it. Do this before revoking GitHub tokens, to avoid the wiper.wiz.io
  • 研究團隊CSA 建議:npm Trusted Publishing 只允許受保護分支上的發布流程restrict them to require that publish credentials be issued only from designated, protected-branch release workflows.labs.cloudsecurityalliance.org
受影響版本42 個 @tanstack/* 套件,每個被發布兩個惡意版本(例如 @tanstack/react-router 1.169.5 與 1.169.8);GitHub Advisory Database 也逐一列出這 84 個版本,完整清單見內文
查看依據(3)
  • CVE 紀錄CVE 紀錄:42 個 @tanstack/* 套件、共 84 個惡意版本被發布到 npm84 malicious versions across 42 @tanstack/* packages were published to the npm registry.cveawg.mitre.org
  • 廠商 / 維護者TanStack 的安全公告:每個受影響套件剛好被發布兩個惡意版本Each affected package received exactly two malicious versions, published a few minutes apart.github.com
  • 廠商 / 維護者TanStack 事後檢討:只有 Router/Start 程式庫受影響,Query、Table、Form 等其他函式庫不受影響Only the Router/Start repo was affected — 42 monorepo packages, 2 versions each.tanstack.com
修好的版本事件後發布的版本(例如 @tanstack/react-router 1.169.9 以上);TanStack 表示目前所有已發布版本皆安全
查看依據(2)
  • 廠商 / 維護者TanStack 事後檢討:目前所有已發布的版本都可以安全安裝Every currently-available published version of every TanStack package — Router and Start included — is safe to install.tanstack.com
  • 漏洞資料庫GitHub Advisory Database 列出各套件第一個安全版本,例如 @tanstack/react-router 1.169.9github.com
CVSS 向量
顯示完整向量CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
時間點
  • 漏洞出現 2026-05-11 · 首批惡意 @tanstack 版本上架 npm 來源
  • 首次公開 2026-05-11
  • 開始被攻擊 2026-05-11 · 發布流程遭劫持並發布惡意版本;未確認受害者 來源
CISA KEV已列入(2026-05-27),代表已有實際攻擊案例
查看依據(4)
  • CERT / 政府CISA 在 2026-05-27 依遭實際利用的證據,把本 CVE 列入 KEVKnown Exploited Vulnerabilities (KEV) Catalog, based on evidence of active exploitation.cisa.gov
  • CERT / 政府CVE 紀錄中 CISA 的補充資料:列入 KEV 的日期為 2026-05-27"dateAdded":"2026-05-27"cveawg.mitre.org
  • 漏洞資料庫NVD 記錄的 KEV 資訊:2026-05-27 列入,聯邦機關期限 2026-06-10"cisaExploitAdd":"2026-05-27","cisaActionDue":"2026-06-10"services.nvd.nist.gov
  • 廠商 / 維護者TanStack 事後檢討:惡意版本上線後 20 到 26 分鐘就被公開發現The malicious versions were detected publicly within 20 to 26 minutestanstack.com

藍隊應對手冊

確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。

DETECT確認我受影響嗎?有沒有入侵跡象?
  1. 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
  2. 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
  3. 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。

  4. 04檢查雲端稽核紀錄

    官方建議:稽核在事件期間執行過安裝的 CI 執行環境,並檢查安裝後雲端稽核紀錄中的可疑活動。

MITIGATE修補 / 緩解先修補;還不能修補時先擋住
  1. 01升級到事件後發布的版本

    例如 @tanstack/react-router 1.169.9 以上;各套件的第一個安全版本見內文表格。npm 已在當天移除惡意版本。

    唯讀查詢
    npm ls --all 2>/dev/null | grep '@tanstack/'
  2. 02暫時停用安裝腳本

    官方公告的暫時防禦措施,讓套件在安裝時無法自動執行程式。可能影響需要安裝腳本的正常套件。

    會變更環境
    npm config set ignore-scripts true
RESPOND應變發現入侵跡象時
  1. 01先移除後門或隔離機器,再撤銷 token

    安全機構(非 TanStack)建議:先移除 gh-token-monitor 服務與 .claude、.vscode 掛鉤,或把機器隔離,否則撤銷 token 可能觸發刪除家目錄。TanStack 公告本身沒有提到這個順序。

  2. 02輪替安裝主機能存取的所有憑證

    TanStack 建議:5 月 11 日安裝過受影響版本者,輪替 AWS、GCP、Kubernetes、Vault、GitHub、npm 與 SSH 憑證。

  3. 03檢查自己維護的套件是否被重新發布

    惡意程式會用偷來的權限重新發布受害者維護的套件;檢查近期發布紀錄,並還原作者為 claude@users.noreply.github.com 的可疑 commit(CSA 建議)。

HARDEN強化長期避免同類問題
  1. 01不要讓外部 PR 程式碼以主程式庫權限執行

    TanStack 已移除 pull_request_target、加上程式庫擁有者檢查,並正導入 zizmor 檢查工具與 .github 的 CODEOWNERS 規則。

  2. 02發布流程不共用快取,Actions 釘選到 commit SHA

    TanStack 已停用發布流程的 pnpm 快取、清除所有快取,並把 Actions 釘選到 commit SHA。

  3. 03收緊 npm Trusted Publishing

    CSA 建議只允許受保護分支上的發布流程發布;TanStack 也要求 npm 與 GitHub 使用非簡訊的兩步驟驗證。

  4. 04為新版本設定安裝冷卻期

    這批惡意版本只上線數十分鐘到數小時;延後安裝剛發布的版本(例如 pnpm 11 的功能)可以避開這類事件。另監控 AI 工具設定資料夾的變動(CSA 建議)。

完整修復步驟與說明
  1. 升級。 把受影響套件更新到事件後發布的版本(見上表第一個安全版本),並重新產生 lockfile。
  2. 暫時停用安裝腳本 官方公告的暫時防禦:npm config set ignore-scripts true。可能影響需要安裝腳本的正常套件。
  3. 檢查是否中招。 官方建議:在 lockfile 中搜尋上表版本;檢查 package.json 是否有意料之外的 @tanstack/setup optionalDependencies;尋找未宣告的 router_init.js。要檢視套件內容時用 npm pack,不要執行安裝腳本。官方公告列出的外傳網域為 filev2.getsession.orgseed1seed3.getsession.org,可在網路紀錄中搜尋。
  4. 如果中招:先清後門,再撤銷 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 公告本身沒有提到這個順序。
  5. 輪替憑證。 TanStack 建議:5 月 11 日安裝過受影響版本者,輪替那台機器能存取的所有 AWS、GCP、Kubernetes、Vault、GitHub、npm 與 SSH 憑證;稽核當時執行安裝的 CI 環境,並檢查雲端稽核紀錄。也要還原作者為 claude@users.noreply.github.com 的可疑 commit(CSA 建議)。
  6. 長期強化(TanStack 已採用): 移除 pull_request_target 並加上程式庫擁有者檢查;發布流程停用 pnpm 快取並清除所有快取;Actions 釘選到 commit SHA;npm 與 GitHub 要求非簡訊的兩步驟驗證;改用 pnpm 11 的新版本安裝冷卻期;導入 zizmor 檢查工具與 .github 的 CODEOWNERS 規則(進行中)。CSA 另建議把 npm Trusted Publishing 限制在受保護分支的發布流程,並監控 AI 工具設定資料夾的變動。

攻擊流程

從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。

TanStack npm 供應鏈入侵(Mini Shai-Hulud):發布流程被劫持,42 個 @tanstack 套件被植入竊取憑證的惡意程式: 1. 從改名過的分叉程式庫(fork)送出 Pull Request → 2. 污染 GitHub Actions 快取 → 3. 從記憶體取出 OIDC token,直接發布到 npm → 4. 受害者安裝套件,惡意程式自動執行 → 5. 竊取憑證並自我擴散 → 6. 留下後門,撤銷 token 時可能刪除資料CVE-2026-45321 · TanStack npm 供應鏈入侵(Mini Shai-Hulud):發布流程被劫持,42 個 @tanstack 套件被植入竊取憑證的惡意程式攻擊者你的系統外部從改名過的分叉程式庫(fork)送出 Pull Request — 攻擊者建立自己的分叉程式庫(fork),並刻意改名,讓它不容易在 fork 清單中被找到,再送出 PR。TanStack 一個由 pull_request_target 觸發的工作流程,會以主程式庫的權限執行外部 fork 的程式碼,而且第一次貢獻的人不需核准。 1從改名過的分叉程式庫(fork)送出 PullRequest污染 GitHub Actions 快取 — 這次執行可以寫入 Actions 快取(pnpm 套件儲存區)。之後主程式庫的正式發布流程沿用了這份被污染的快取。 2污染 GitHub Actions快取從記憶體取出 OIDC token,直接發布到 npm — 被污染的程式在發布過程中讀取執行環境的記憶體,取得可發布到 npm 的短效 OIDC token,在約 6 分鐘內發布 84 個惡意版本。因為來自真正的流程,套件帶有有效的 SLSA 來源證明與 Sigstore 簽章。 3從記憶體取出 OIDCtoken,直接發布到 npm受害者安裝套件,惡意程式自動執行 — 惡意版本透過 optionalDependencies 與安裝階段腳本,在 npm install 時自動執行約 2.3 MB 的混淆程式 router_init.js。 4受害者安裝套件,惡意程式自動執行竊取憑證並自我擴散 — 偷取雲端、Kubernetes、Vault、GitHub、npm 與 SSH 憑證,經 Session 通訊網路外傳,再列出受害者維護的其他套件並以同樣手法重新發布。 5竊取憑證並自我擴散留下後門,撤銷 token 時可能刪除資料 — 研究機構回報:在 Claude Code 與 VS Code 設定中加入開啟時自動執行的掛鉤,並安裝 gh-token-monitor 背景服務;若偵測到被盜 token 遭撤銷,會刪除家目錄(觸發細節各家說法不同)。 6留下後門,撤銷 token時可能刪除資料攻擊路徑可在此擋下PlainCVE · plaincve.date/vulns/cve-2026-45321-tanstack-npm-supply-chain-compromise · CC BY 4.0
圖片可自由用於報導與教學,採 CC BY 4.0,圖上已附出處。
  1. 攻擊者

    從改名過的分叉程式庫(fork)送出 Pull Request

    攻擊者建立自己的分叉程式庫(fork),並刻意改名,讓它不容易在 fork 清單中被找到,再送出 PR。TanStack 一個由 pull_request_target 觸發的工作流程,會以主程式庫的權限執行外部 fork 的程式碼,而且第一次貢獻的人不需核准。

    防禦: 不要在 pull_request_target 中執行外部 PR 的程式碼;要求首次貢獻者經過核准。

  2. 外部

    污染 GitHub Actions 快取

    這次執行可以寫入 Actions 快取(pnpm 套件儲存區)。之後主程式庫的正式發布流程沿用了這份被污染的快取。

    防禦: 發布流程停用快取,並清除所有既有 Actions 快取。

  3. 外部

    從記憶體取出 OIDC token,直接發布到 npm

    被污染的程式在發布過程中讀取執行環境的記憶體,取得可發布到 npm 的短效 OIDC token,在約 6 分鐘內發布 84 個惡意版本。因為來自真正的流程,套件帶有有效的 SLSA 來源證明與 Sigstore 簽章。

    防禦: 限制 npm Trusted Publishing 只允許受保護分支上的發布流程;記得來源證明不等於內容安全。

  4. 你的系統

    受害者安裝套件,惡意程式自動執行

    惡意版本透過 optionalDependencies 與安裝階段腳本,在 npm install 時自動執行約 2.3 MB 的混淆程式 router_init.js。

    防禦: 升級到事件後的版本;暫時設定 ignore-scripts;使用 lockfile 與新版本安裝冷卻期。

  5. 你的系統

    竊取憑證並自我擴散

    偷取雲端、Kubernetes、Vault、GitHub、npm 與 SSH 憑證,經 Session 通訊網路外傳,再列出受害者維護的其他套件並以同樣手法重新發布。

    防禦: 輪替安裝主機能存取的所有憑證;CI 只給最小權限。

  6. 你的系統

    留下後門,撤銷 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-core1.169.5、1.169.81.169.9
history、eslint-plugin-router1.161.9、1.161.121.161.13
router-cli1.166.46、1.166.491.166.50
router-generator1.166.45、1.166.481.166.49
router-plugin1.167.38、1.167.411.167.42
router-utils1.161.11、1.161.141.161.15
router-vite-plugin1.166.53、1.166.561.166.57
router-devtools、react-router-devtools、vue-router-devtools、solid-router-devtools1.166.16、1.166.191.166.20
router-devtools-core1.167.6、1.167.91.167.10
router-ssr-query-core1.168.3、1.168.61.168.7
react-router-ssr-query、vue-router-ssr-query、solid-router-ssr-query1.166.15、1.166.181.166.19
virtual-file-routes1.161.10、1.161.131.161.14
react-start1.167.68、1.167.711.167.72
react-start-client1.166.51、1.166.541.166.55
react-start-server1.166.55、1.166.581.166.59
react-start-rsc0.0.47、0.0.500.0.51
solid-start1.167.65、1.167.681.167.69
solid-start-client1.166.50、1.166.531.166.54
solid-start-server1.166.54、1.166.571.166.58
vue-start1.167.61、1.167.641.167.65
vue-start-client1.166.46、1.166.491.166.50
vue-start-server1.166.50、1.166.531.166.54
start-client-core1.168.5、1.168.81.168.9
start-server-core1.167.33、1.167.361.167.37
start-plugin-core1.169.23、1.169.261.169.27
start-fn-stubs1.161.9、1.161.121.161.13
start-static-server-functions1.166.44、1.166.471.166.48
start-storage-context1.166.38、1.166.411.166.42
eslint-plugin-start0.0.4、0.0.70.0.8
nitro-v2-vite-plugin1.154.12、1.154.151.154.16
zod-adapter、valibot-adapter、arktype-adapter1.166.12、1.166.151.166.16

曝險時間: TanStack 表示惡意版本上線後 20 到 26 分鐘就被發現;21:03 UTC 前 84 個版本全部標為棄用,npm 在 22:13 到 23:55 UTC 之間移除了套件檔。惡意版本的下載次數未能確認

原理

TanStack 的事後檢討說明,攻擊者串聯了 GitHub Actions 設定中的三個弱點:

  1. 「Pwn Request」。 一個由 pull_request_target 觸發的工作流程,會用主程式庫的權限執行外部 fork 送來的 PR 程式碼,而且第一次貢獻的人不需要核准。攻擊者先建立自己的分叉程式庫(fork)並刻意改名,讓它不容易在 fork 清單中被找到,再從它送出 PR。
  2. 快取污染。 這次執行可以寫入 GitHub Actions 快取(pnpm 套件儲存區)。之後主程式庫的正式發布流程沿用了這份被污染的快取。
  3. 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:46StepSecurity 研究人員在 issue #7383 回報
2026-05-11 20:19 / 21:03首批版本棄用 / 84 個版本全部棄用
2026-05-11 20:50CVE 編號保留
2026-05-11 22:13–23:55npm 移除套件檔
2026-05-11GitHub 安全公告發布
2026-05-12 00:12CVE 公開(NVD 顯示 01:16)
2026-05-12(05-15 更新)TanStack 發布強化措施後續文章
2026-05-27列入 CISA KEV,聯邦機關期限 2026-06-10
2026-06-08 / 06-17 / 08-04GHSA / 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

驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.

來源

  1. 安全公告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
  2. 安全公告GHSA-g7cv-rxg3-hmpx (GitHub Advisory Database) · GitHub, 2026-05-11 · 查閱 2026-09-23
  3. 安全公告CVE-2026-45321 CVE record · CVE Program / GitHub CNA, 2026-05-12 · 查閱 2026-09-23
  4. CVE / NVD / OSVCVE-2026-45321 NVD API record · NIST NVD, 2026-05-12 · 查閱 2026-09-23
  5. 安全公告CISA Adds Three Known Exploited Vulnerabilities to Catalog · CISA, 2026-05-27 · 查閱 2026-09-23
  6. 安全公告Widespread Supply Chain Compromise Impacting npm Ecosystem · CISA, 2025-09-23 · 查閱 2026-09-23
    Shai-Hulud 第一波(2025 年 9 月)的背景資料。
  7. 廠商說明Postmortem: TanStack npm supply-chain compromise · TanStack, 2026-05-11 · 查閱 2026-09-23
  8. 廠商說明Hardening TanStack After the npm Compromise · TanStack, 2026-05-12 · 查閱 2026-09-23
  9. 其他Several npm latest releases were compromised · Issue #7383 · TanStack (GitHub), 2026-05-11 · 查閱 2026-09-23
  10. 研究文章TeamPCP's Mini Shai-Hulud Is Back: A Self-Spreading Supply Chain Attack Compromises TanStack npm Packages · StepSecurity, 2026-05-11 · 查閱 2026-09-23
  11. 研究文章Mini Shai-Hulud Strikes Again: TanStack + more npm Packages Compromised · Wiz, 2026-05-11 · 查閱 2026-09-23
  12. 研究文章TanStack npm Packages Hit by Mini Shai-Hulud · Snyk, 2026-05-11 · 查閱 2026-09-23
  13. 研究文章Mini Shai-Hulud: TeamPCP Worm Targets AI Developer Toolchain · Cloud Security Alliance, 2026-05-18 · 查閱 2026-09-23
  14. 研究文章Supply Chain Campaign Targets SAP npm Packages with Credential-Stealing Malware · Wiz, 2026-04-29 · 查閱 2026-09-23
  15. 新聞報導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 的流程;問題是流程本身已經被動了手腳。

圖片

下載分享圖(PNG) · 攻擊流程圖(可下載)

引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.

如何引用本頁

本文採 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}
}