攻擊活動專欄

Shai-Hulud:npm 與 PyPI 的自我擴散蠕蟲攻擊活動

受影響套件
2,068
受影響版本
5,307
OSV 紀錄
2,111
事件分組
8
OSV 收錄期間
2025-09-15 → 2026-08-26

數字是本站 OSV 快照中「提到 Shai-Hulud」的紀錄:版本以「套件 + 版本」去重計算,一則紀錄可能涵蓋多個版本;不代表全部受害規模。事件分組是本站依日期整理的結果,各組的攻擊者不一定相同。

npmPyPIPlainCVE 團隊 · 發布 2026-09-24 · AI 輔助

2025 年 9 月起,多起使用 Shai-Hulud 名稱、程式碼或手法的供應鏈攻擊,用被盜的發布權限在 npm 與 PyPI 放入惡意版本;攻擊者不一定是同一群人。

誰會中在各次攻擊期間安裝或更新過受影響版本的開發電腦與 CI 環境,以及它們能存取的 GitHub、npm、PyPI 與雲端帳號。
現在該做什麼先用下方工具檢查 lockfile;如果中了,先隔離機器或移除常駐程式,再撤銷並輪替所有憑證。

攻擊流程

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

Shai-Hulud:npm 與 PyPI 的自我擴散蠕蟲攻擊活動:典型感染流程: 1. 取得維護者的發布權限 → 2. 以正式身分發布夾帶安裝腳本的新版本 → 3. 開發者或 CI 執行 npm install → 4. 蒐集機密 → 5. 外洩到公開的 GitHub repo → 6. 用偷來的權杖感染更多套件 → 7. 常駐,部分版本會破壞攻擊活動專欄 · Shai-Hulud:npm 與 PyPI 的自我擴散蠕蟲攻擊活動:典型感染流程攻擊者你的系統外部取得維護者的發布權限 — 盜用維護者帳號或權杖、利用 GitHub Actions 設定錯誤(例如 pull_request_target),或濫用設定過寬的 npm 受信任發布。 1取得維護者的發布權限以正式身分發布夾帶安裝腳本的新版本 — 套件本身的功能程式幾乎不動,只多一個 preinstall / postinstall 腳本或相依套件;2026 年的版本甚至帶有真的來源證明與簽章。 2以正式身分發布夾帶安裝腳本的新版開發者或 CI 執行 npm install — 版本範圍(例如 ^1.2.0)讓安裝自動拿到最新的惡意版本,安裝腳本隨即執行;PyPI 版本則在 Python 啟動時經 .pth 檔執行。 3開發者或 CI 執行npm install蒐集機密 — 讀取環境變數、.npmrc、雲端憑證與中繼資料服務、GitHub 權杖,以及 AI 工具的設定檔;早期版本還用 TruffleHog 掃描整個磁碟。 4蒐集機密外洩到公開的 GitHub repo — 把偷到的資料編碼後,放進受害者帳號底下新建的公開 repo(說明常含 Shai-Hulud、Sha1-Hulud、Hades 等字樣);後期版本也改用其他外傳通道。 5外洩到公開的GitHub repo用偷來的權杖感染更多套件 — 用受害者的 npm 權杖列出他能發布的其他套件,逐一植入並發布新版本,流程回到第 2 步,這就是它會自己擴散的原因。 6用偷來的權杖感染更多套件常駐,部分版本會破壞 — 植入 GitHub Actions 工作流程或自架 runner、在 .claude/ 與 .vscode/ 加入自動執行設定、安裝 gh-token-monitor 背景服務;部分版本在權杖被撤銷時刪除家目錄。 7常駐,部分版本會破攻擊路徑可在此擋下PlainCVE · plaincve.date/campaigns/shai-hulud · CC BY 4.0
圖片可自由用於報導與教學,採 CC BY 4.0,圖上已附出處。
  1. 攻擊者

    取得維護者的發布權限

    盜用維護者帳號或權杖、利用 GitHub Actions 設定錯誤(例如 pull_request_target),或濫用設定過寬的 npm 受信任發布。

    防禦: 發布帳號用防釣魚的 MFA;受信任發布限定受保護分支;不在 pull_request_target 執行外部 PR 的程式碼。

  2. 攻擊者

    以正式身分發布夾帶安裝腳本的新版本

    套件本身的功能程式幾乎不動,只多一個 preinstall / postinstall 腳本或相依套件;2026 年的版本甚至帶有真的來源證明與簽章。

    防禦: 新版本發布需人工核准;監控自己套件的發布紀錄;記得「有簽章」不等於內容安全。

  3. 你的系統

    開發者或 CI 執行 npm install

    版本範圍(例如 ^1.2.0)讓安裝自動拿到最新的惡意版本,安裝腳本隨即執行;PyPI 版本則在 Python 啟動時經 .pth 檔執行。

    防禦: 提交 lockfile、CI 用 npm ci;設定 ignore-scripts;新版本安裝冷卻期(min-release-age)。

  4. 你的系統

    蒐集機密

    讀取環境變數、.npmrc、雲端憑證與中繼資料服務、GitHub 權杖,以及 AI 工具的設定檔;早期版本還用 TruffleHog 掃描整個磁碟。

    防禦: CI 與開發機只放最小權限、短效的權杖;機密不放在環境變數與明文檔案。

  5. 外部

    外洩到公開的 GitHub repo

    把偷到的資料編碼後,放進受害者帳號底下新建的公開 repo(說明常含 Shai-Hulud、Sha1-Hulud、Hades 等字樣);後期版本也改用其他外傳通道。

    防禦: 監控組織內新建的公開 repo;限制 CI 與開發機的對外連線。

  6. 攻擊者

    用偷來的權杖感染更多套件

    用受害者的 npm 權杖列出他能發布的其他套件,逐一植入並發布新版本,流程回到第 2 步,這就是它會自己擴散的原因。

    防禦: 發現後立刻撤銷 npm 權杖(但要先做第 7 步);發布需要雙因素驗證。

  7. 你的系統

    常駐,部分版本會破壞

    植入 GitHub Actions 工作流程或自架 runner、在 .claude/ 與 .vscode/ 加入自動執行設定、安裝 gh-token-monitor 背景服務;部分版本在權杖被撤銷時刪除家目錄。

    防禦: 先隔離機器或移除常駐程式,再撤銷權杖;檢查 workflows 與 AI 工具設定。

這是每次攻擊共通的模式;各案例怎麼取得發布權限不盡相同,詳見歷次攻擊與個案頁。第 6 步會回到第 2 步,所以會自己擴散。

快速自我檢查

由快到完整。每一項都附出處。

  1. 查你的套件:用下方的查詢工具,輸入套件名稱或貼上 lockfile [7]

    和 OSV 收錄的所有 Shai-Hulud 相關惡意版本比對,只在瀏覽器裡進行。CI 與開發機的安裝紀錄也要一起檢查。

  2. 檢查 GitHub 帳號有沒有你沒建立的公開 repo [53]

    多數攻擊會把偷到的資料放進受害者帳號下的新 repo,說明文字常含 Shai-Hulud、Sha1-Hulud、Hades 或 Miasma。

    gh repo list <你的帳號或組織> --limit 1000 --json name,description --jq '.[] | select((.description // "") | test("hulud|hades|miasma"; "i")) | .name'
  3. 檢查 repo 裡有沒有陌生的 GitHub Actions 工作流程 [53]

    例如 shai-hulud-workflow.yml、discussion.yaml,或任何輸出 toJSON(secrets) 的步驟;也看看有沒有名為 SHA1HULUD 的自架 runner。

    ls .github/workflows/ | grep -iE 'shai-hulud|discussion|formatter_'
    grep -rl 'toJSON(secrets)' .github/workflows/
  4. 檢查開發機上的常駐程式與 AI 工具設定 [17]

    2026 年的攻擊會在 .claude/settings.json 與 .vscode/tasks.json 加入自動執行的設定,並安裝 gh-token-monitor 之類的背景服務。

    grep -lE 'setup\.mjs|router_runtime|router_init|index\.js' .claude/settings.json .vscode/tasks.json 2>/dev/null
    ls ~/.local/bin/gh-token-monitor.sh ~/Library/LaunchAgents/*token-monitor* ~/Library/LaunchAgents/*kitty-monitor* 2>/dev/null
    systemctl --user list-units 2>/dev/null | grep -iE 'token-monitor|kitty-monitor|update-monitor'
  5. Python 環境:找可疑的 .pth 啟動檔 [54]

    PyPI 的 Hades 攻擊用 *-setup.pth 在 Python 啟動時執行惡意程式。**不要用 python 或 pip 來檢查**:只要啟動 Python,惡意的 .pth 就會先執行。用下面的指令只列出檔案,再逐一檢查陌生的 .pth(特別是 *-setup.pth);可疑的環境請在另一台乾淨的電腦上檢查。

    find / \( -path '*/site-packages/*' -o -path '*/dist-packages/*' \) -name '*.pth' 2>/dev/null
  6. 如果中了:先隔離或移除常駐程式,再撤銷權杖 [54]

    多份報告指出,權杖一被撤銷,部分版本會觸發刪除資料。確認清除後,輪替那台機器能存取的所有憑證(npm、GitHub、雲端、SSH、AI 服務)。

我有沒有中?

和 2,068 個套件、5,307 個惡意版本比對(OSV,2026-09-23 的快照)。全部在你的瀏覽器裡進行,不會上傳任何內容。

檢查整個專案:貼上或選擇 lockfile

支援 package-lock.json、pnpm-lock.yaml、yarn.lock、requirements.txt。檔案只在瀏覽器裡讀取,不會上傳。只需要 lockfile,不要貼上 .npmrc 或其他含有權杖的檔案。

沒有找到不代表一定安全:清單只含已被通報的版本;lockfile 也不一定等於實際安裝過的版本,CI 與開發機的安裝紀錄也要檢查。

時間軸

每週新增的惡意版本紀錄數(依 OSV 發布日期)。

03987952025-102026-012026-042026-072025-09-15: 2032025-11-24: 7952025-12-29: 12026-04-27: 52026-05-04: 12026-05-11: 2622026-05-18: 3342026-05-25: 332026-06-01: 702026-06-08: 72026-06-22: 72026-06-29: 232026-07-06: 82026-08-03: 4462026-08-24: 1
Shai-Hulud(第一波)Sha1-Hulud: The Second Coming(Shai-Hulud 2.0)Mini Shai-Hulud:SAP 與 PyTorch LightningMini Shai-Hulud:TanStack、UiPath、MistralMini Shai-Hulud:@antv 與模仿者IronWorm(Rust 版)Red Hat 套件與 Hades / Miasma(PyPI)keyv / cacheable(ChainDrop)

歷次攻擊

01

Shai-Hulud(第一波)

npm2025-09-01 → 2025-10-31 · OSV 紀錄 203 筆 · 203 個套件 · 589 個版本

@ctrl/tinycolor 等 npm 套件被植入惡意版本,安裝時偷走開發者與 CI 的憑證,再用偷來的 npm 權杖自動感染同一位維護者的其他套件,是 npm 上第一個成功自我擴散的蠕蟲。

這一波的新手法:與前身 Nx/s1ngularity 相比:自動感染其他套件、用 GitHub Actions 工作流程外洩資料、用 TruffleHog 搜尋機密。

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

怎麼進來的:最初怎麼取得發布權限沒有定論;各家只確認維護者的帳號或權杖遭盜用。Wiz 研判與 2025 年 8 月的 Nx 事件相關,屬推測。

做了什麼:postinstall 執行 bundle.js:讀取環境變數、用 TruffleHog 掃描檔案系統、查詢雲端中繼資料與密鑰服務,把結果上傳到受害者帳號下名為 Shai-Hulud 的公開 repo,並植入 shai-hulud-workflow.yml 持續外洩。

規模(各家數字不同): 最初有 40 多個套件受影響(Socket [31]);9 月 16 日更新:將近 500 個套件,包含 CrowdStrike 的套件(Socket [31]);500 個以上的套件(StepSecurity [51]);列出 195 個套件及其版本(StepSecurity [51]);發文時有 187 個以上的套件,預期還會增加(Semgrep [22]);內文寫超過 100 個套件(Wiz [58]);附錄列出約 200 多個套件名稱、200 多個版本(Wiz [58]);最初 40 個(引用 Socket/StepSecurity),另外又有「147 個以上」;是否代表總共 187 個未經證實(Aikido Security [38]);從 npm 移除了 500 個以上遭入侵的套件(GitHub [3]);超過 500 個套件(CERT/CC [47])

歸因: 研判這波攻擊「直接承接」2025 年 8 月底的 s1ngularity/Nx 入侵事件(屬於研判,沒有給出信心程度)(Wiz [58]);文章標題把這一波和 s1ngularity/Nx 的攻擊者連在一起,並說攻擊者沿用了 Nx 事件的大部分手法;Aikido 認為「Shai-Hulud」這個名字是攻擊者自己取的,沒有把它歸咎於任何特定組織(Aikido Security [38]);以「中等信心」認為攻擊者用了大型語言模型(LLM)協助寫程式,根據是 bash 腳本裡的註解和表情符號;這不是在指認特定攻擊者(Palo Alto Networks Unit 42 [35])

怎麼檢查:
  • 把專案的 lockfile 和已安裝版本,拿去比對各家公布的受影響版本清單(例如 @ctrl/tinycolor 4.1.1 和 4.1.2)。
  • 用 npm view <套件名稱> time 查看各版本的發布時間,留意 2025 年 9 月 15 日前後冒出來的新版本。
  • 在你的 GitHub 帳號或組織裡搜尋 shai-hulud-workflow.yml、名為 shai-hulud 的分支、名為 Shai-Hulud 的程式碼庫,以及名稱以「-migration」結尾或說明寫著「Shai-Hulud Migration」的程式碼庫。
  • 檢查 GitHub 稽核紀錄和雲端稽核紀錄有沒有異常的機密存取,例如 AWS CloudTrail 裡的 BatchGetSecretValue、ListSecrets、GetSecretValue 事件。
  • 留意建置機器或開發機上有沒有這些跡象:TruffleHog 在掃整個檔案系統、帶強制參數的 npm publish,或用 curl 連到 webhook.site。
02

Sha1-Hulud: The Second Coming(Shai-Hulud 2.0)

npmMaven2025-11-01 → 2026-01-31 · OSV 紀錄 796 筆 · 796 個套件 · 1,125 個版本

規模最大的一波:Zapier、ENS、PostHog、Postman、AsyncAPI 等數百個 npm 套件被植入蠕蟲,一個版本還被自動轉進 Maven Central。12 月底另有一個名為「The Golden Path」的改版,只出現在單一套件。

這一波的新手法:改在 preinstall 執行(安裝失敗也會跑)、改用 Bun 執行環境、外洩 repo 名稱隨機化、每人最多感染 100 個套件、新增刪除家目錄的破壞功能,以及用自架 runner 常駐。

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

怎麼進來的:以 PostHog 為例:攻擊者利用 pull_request_target 工作流程的設定錯誤,偷到機器人帳號的 GitHub 權杖,再改寫流程取得發布權限。

做了什麼:setup_bun.js 下載 Bun,在背景執行混淆的 bun_environment.js:蒐集環境變數、.npmrc、雲端憑證與 GitHub 權杖,編碼後放進新建的公開 repo,再感染受害者的其他套件;取不到權杖時可能刪除家目錄。

規模(各家數字不同): 796 個不重複的 npm 套件(Datadog Security Labs [21]);1,092 個套件版本(Datadog Security Labs [21]);約 700 個 npm 套件(附錄中寫的是「800+」)(Wiz [57]);492 個套件(Aikido Security [40]);795 個 npm 套件(ReversingLabs [50]);撰文當時「超過 70 個」套件(StepSecurity [53]);500 個以上套件(Socket [30]);700 個以上版本(Socket [30]);830 個以上 npm 套件(The Hacker News [32]);1 個 Maven 套件(org.mvnpm:posthog-node:4.18.1),報導當時唯一受影響的 Java 套件(The Hacker News [32]);PostHog 有 8 個 JavaScript 套件遭入侵(PostHog [12]);「Golden Path」改版:1 個套件(@vietmoney/react-big-calendar),未見明顯擴散(Aikido Security [39])

歸因: 目前沒有任何已確認的歸屬(不知道是誰做的)。(Wiz [57]);12 月的「Golden Path」改版的程式碼是重新混淆過的,而不是直接修改現成的程式碼,所以 Aikido 認為「極不可能是模仿者」,比較可能是原本的攻擊者所為。這是研究人員的判斷,不是已確認的歸屬。(Aikido Security [39])

怎麼檢查:
  • 把專案的 lockfile(例如 package-lock.json)和各家公布的受影響套件版本清單比對,特別是 2025 年 11 月 21 日之後安裝或更新的套件。
  • 在你的 GitHub 帳號和組織中,搜尋說明文字含「Sha1-Hulud」(或「Goldox-T3chs」)的儲存庫,以及你不認得的公開儲存庫或分支。
  • 檢查有沒有名為 SHA1HULUD 的自架 runner,以及不明的 .github/workflows/discussion.yaml 或 formatter_123456789.yml 工作流程。
  • 在電腦和 CI 環境中尋找 setup_bun.js、bun_environment.js(或 bun_installer.js、environment_source.js)檔案或相關程序,以及 $HOME/.dev-env/ 資料夾。
  • 檢查 npm 帳號的發布紀錄,看看有沒有你沒發布過的新版本;如果有中毒跡象,就要更換所有 npm、GitHub、SSH、雲端與 CI 的權杖和密鑰。
03

Mini Shai-Hulud:SAP 與 PyTorch Lightning

npmPyPI2026-04-01 → 2026-05-06 · OSV 紀錄 5 筆 · 5 個套件 · 6 個版本

SAP 官方的 @cap-js 與 mbt npm 套件、PyPI 上的 PyTorch Lightning(2.6.2、2.6.3)相繼被植入竊取憑證的惡意程式,攻擊活動第一次延伸到 PyPI。

這一波的新手法:利用設定過寬的 npm 受信任發布(OIDC);透過 VS Code 的 tasks.json 與 Claude Code 設定檔常駐;commit 假冒作者「claude」。

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

怎麼進來的:SAP:一名開發者的 GitHub 帳號被盜,攻擊者修改非主要分支上的發布工作流程換取 npm 權杖。Lightning:可能是專案層級的 PyPI 權杖外洩,未證實。

做了什麼:安裝或匯入時執行,偷取開發者與 CI 環境的憑證,並在能寫入的 GitHub repo 植入檔案與工作流程繼續擴散。

規模(各家數字不同): SAP 事件:4 個惡意版本(@cap-js/sqlite@2.2.2、@cap-js/postgres@2.2.2、@cap-js/db-service@2.10.1、mbt@1.2.48)(BleepingComputer [41]);@cap-js 套件合計每月約 100 萬次下載,mbt 約 20 萬次(SafeDep [16]);SAP 那一波有超過 1,000 個 GitHub 儲存庫被植入惡意檔案(SafeDep [16]);PyPI 套件 lightning 有 2 個惡意版本(2.6.2、2.6.3)(Socket [25])

歸因: Aikido 與 Socket 以「中等信心」將 SAP 事件連結到 TeamPCP,依據是與 Trivy、Checkmarx、Bitwarden 攻擊相似的程式碼和手法。(BleepingComputer (reporting Aikido and Socket) [41]);攻擊者在 Tor 網站上發布一則以「Team PCP」名義、有 PGP 簽章的訊息,聲稱 LAPSUS$ 也深度參與;Socket 未驗證簽章或這些關係,並認為這是和原始 Shai-Hulud 不同、但手法相似的攻擊者。(Socket [25]);將 Lightning 事件歸於 TeamPCP,並轉述 LAPSUS$ 的說法,未說明信心程度。(The Hacker News [33])

04

Mini Shai-Hulud:TanStack、UiPath、Mistral

npmPyPI2026-05-07 → 2026-05-15 · OSV 紀錄 180 筆 · 179 個套件 · 428 個版本

攻擊者劫持 TanStack 的 GitHub Actions 發布流程,以正式身分在 42 個 @tanstack/* 套件發布 84 個惡意版本;同一天 UiPath、Mistral AI 等套件也受害。唯一有 CVE 並列入 CISA KEV 的一波。

這一波的新手法:串聯 pull_request_target、Actions 快取污染與記憶體中的 OIDC 權杖;惡意版本帶有有效的 SLSA 來源證明與 Sigstore 簽章。

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

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

規模(各家數字不同): 42 個套件、84 個惡意版本(TanStack [4])

歸因: 「Mini Shai-Hulud」的名稱與對 TeamPCP 的歸因(StepSecurity [52]);同一攻擊活動、同日另有其他套件受害(Wiz [56])

05

Mini Shai-Hulud:@antv 與模仿者

npm2026-05-16 → 2026-05-22 · OSV 紀錄 332 筆 · 334 個套件 · 677 個版本

一位 npm 維護者名下數百個套件(@antv、echarts-for-react、size-sensor 等)在短時間內被大量發布惡意版本。同期也出現拿外洩原始碼發布的模仿套件。

這一波的新手法:劫持 AI 程式助理、透過 GitHub commit 搜尋下達指令、濫用 Sigstore 簽章、嘗試逃出 Docker 容器、讀取 CI 執行器記憶體。

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

規模(各家數字不同): @antv 那一波:317 個套件、637 個版本(網址中寫的是 314)(SafeDep [17]);@antv 那一波:323 個套件、639 個版本(Socket [24]);整個攻擊活動合計:502 個套件、1,055 個版本(npm 498 個套件/1,048 個版本;PyPI 3/6;Composer 1)(Socket [24]);約 1,900 個用來存放偷來資料的 GitHub 儲存庫(Socket [24]);@antv 那一波:324 個套件、645 個版本(其中一名維護者帳號下 547 個套件有 318 個被入侵,另一個帳號 6 個);合計每週約 1,600 萬次下載(OpenSourceMalware [6]);模仿者:4 個套件,合計每週 2,678 次下載(OX Security [49])

歸因: 將 @antv 那一波歸於 TeamPCP,但文中未提供信心程度或證據。(OpenSourceMalware [6]);因為運作方式相同,將 @antv 那一波歸入「Mini Shai-Hulud」攻擊活動,但沒有指名攻擊者。(Socket [24]);以高信心判斷 4 個模仿套件來自另一個攻擊者,而不是 TeamPCP,理由是混淆程度低,而且時間點和原始碼外洩、BreachForums 上的「供應鏈攻擊競賽」相符。(OX Security [49])

06

IronWorm(Rust 版)

npm2026-05-23 → 2026-05-31 · OSV 紀錄 33 筆 · 33 個套件 · 36 個版本

一個 npm 帳號下數十個 WeaveDB / Arweave 相關套件被重新發布成惡意版本。惡意程式改用 Rust 撰寫,偷取雲端、AI 服務與開發工具的金鑰,再用偷來的 GitHub 權限推送到更多 repo。

這一波的新手法:編譯過的 Rust 程式取代混淆的 JavaScript、字串個別加密、經 Tor 通訊、附帶 eBPF rootkit;沿用 Shai-Hulud 的 commit 訊息。

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

怎麼進來的:攻擊者控制了發布這些套件的 npm 帳號;最初怎麼入侵沒有公開說明。

做了什麼:preinstall 執行 ./tools/setup(Linux 程式),蒐集數十種雲端、AI 服務與 CI 憑證,並對能寫入的 GitHub repo 推送日期被改早的惡意 commit。

規模(各家數字不同): 33 筆惡意套件紀錄(依我們擷取的 OSV 快照)(OSV [10]);IoC 表列出 37 個「套件@版本」項目(內文沒有給總數)(JFrog Security Research [13]);9 個 GitHub 組織裡共有 57 個日期被改早的惡意 commit(JFrog Security Research [13]);活躍期間,被入侵帳號對私人專案有約 4,500 次貢獻(JFrog Security Research [13]);37 個套件、9 個組織、57 個日期被改早的 commit、約 4,500 次私人貢獻;並提醒公開數字只是下限(Phoenix Security [11]);43 個惡意套件,其中 37 個有列出名稱(SafeDep [19]);「超過 50 個」npm 套件(The Hacker News [34])

歸因: 操作者身分不明。對方有幾個操作安全上的失誤:把自己錢包的助記詞放進惡意程式的略過清單、留下 eBPF 建置路徑,也沒有移除除錯資訊。從助記詞推導出的以太坊地址幾乎沒有餘額。(JFrog Security Research [13]);「身分不明的攻擊者」,在操作上與 Shai-Hulud/TeamPCP 相近,但「沒有確認的身分重疊」。(Phoenix Security [11])

怎麼檢查:
  • 在 package-lock.json、yarn.lock 或 pnpm-lock.yaml 裡搜尋 JFrog 列出的惡意版本,例如 ai3@0.3.5、arnext@0.1.5、weavedb-sdk@0.45.3。
  • 檢查專案和 node_modules 裡是否有 tools/setup 或 .github/scripts/precheck 檔案,以及 package.json 裡是否有「"preinstall": "./tools/setup"」。
  • 檢查你能寫入的 GitHub 程式碼庫:有沒有作者是 claude@users.noreply.github.com、或假冒 dependabot/renovate/github-actions 機器人、日期卻是好幾年前的 commit,以及 commit 訊息是否符合上面列出的那些。
  • 檢查 GitHub Actions 工作流程:有沒有新增名叫「Run checks」「Process results」「Run analysis」的工作、使用 toJSON(secrets) 的步驟,或名為 format-results.txt 的產出檔。
  • 如果曾在 Linux 機器上安裝過這些版本,要把整台機器視為已被入侵:重灌系統,並更換所有雲端、AI、npm、GitHub 和 Kubernetes 的憑證。
07

Red Hat 套件與 Hades / Miasma(PyPI)

npmPyPI2026-06-01 → 2026-07-31 · OSV 紀錄 115 筆 · 78 個套件 · 182 個版本

數十個 @redhat-cloud-services npm 套件被植入惡意版本;約一週後同一家族擴散到 PyPI(研究者稱為 Hades),受害的包括生物資訊、AI 代理與 MCP 相關套件。8 月底 pantheon-agents 的公告是補記 6 月的入侵。

這一波的新手法:惡意分支也能透過 npm 受信任發布拿到發布權杖,版本帶有有效的來源證明;PyPI 改用 .pth 啟動掛鉤;程式內含誘使 AI 分析工具拒絕分析的內容。

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

怎麼進來的:npm:攻擊者在 Red Hat 的 repo 建立惡意分支並改寫 CI 工作流程;受信任發布只核對 repo 與工作流程檔名,不檢查分支。PyPI:被接管的維護者帳號或外洩的 API 權杖。

做了什麼:安裝後(npm)或 Python 啟動時(PyPI)下載 Bun 執行竊取程式,蒐集開發者與雲端憑證、擴散到其他套件與 repo,並把資料放到公開 GitHub repo;是否會刪除檔案各家說法不一。

規模(各家數字不同): npm:32 個 @redhat-cloud-services 套件,共 96 個惡意版本(SafeDep [18]);上述套件來自 3 個 GitHub 程式庫:javascript-clients(15 個)、frontend-components(14 個)、platform-frontend-ai-toolkit(3 個)(SafeDep [18]);PyPI:19 個專案,共 37 個惡意 wheel 檔(Socket [29]);整個攻擊活動合計 448 個檔案(npm 106 個套件共 411 個,PyPI 19 個共 37 個);npm 數字是整體活動的總數,不代表 Red Hat 套件的數量(Socket [29]);整個攻擊活動合計 471 個檔案(npm 106 個套件共 411 個,PyPI 37 個套件共 60 個),其中包含 23 個較新的 PyPI 套件版本(Socket [27]);PyPI:30 個套件,共 36 個遭入侵版本(StepSecurity [54]);PyPI:6 個生物資訊套件,各有 1 個惡意版本(Endor Labs [46]);PyPI:5 個已確認的套件(O3 Security [5]);pantheon-agents:受影響版本為 0.6.1 和 0.6.2(OSV)(OSV [8]);pantheon-agents:GitLab 資料庫列出的影響範圍是 0.6.1 到 0.6.3,但它自己的說明只提到 0.6.1 和 0.6.2,兩者不一致(GitLab Advisory Database [2])

歸因: 歸因於 TeamPCP,並把此組織連結到 Shai-Hulud 2.0 和 LiteLLM 入侵事件,但文章中沒有提出證據(O3 Security [5]);只用一句話提到這是「TeamPCP 的作業安全強化」,沒有說明理由(Endor Labs [46]);根據手法重疊,認為這是 Miasma 威脅行為者的演進版本(StepSecurity [54]);認為歸屬不明:TeamPCP 已把 Shai-Hulud 公開為開源攻擊工具,還在 BreachForums 推廣競賽,所以可能有很多不同的人在發動類似攻擊(Socket [26]);從技術手法判斷與 Shai-Hulud / Miasma 屬於同一系列,但沒有指名攻擊者(Socket [29])

怎麼檢查:
  • 把 lockfile、CI 紀錄,以及 site-packages 裡的套件資料夾名稱(用 ls 查看,不要在可能被感染的環境執行 pip 或 python),拿來和報告公布的受影響版本清單比對(例如 @redhat-cloud-services 套件、ensmallen 0.8.101、pantheon-agents 0.6.1/0.6.2)。注意:npm 的「最新版」本身可能就是惡意版本,npm audit signatures 顯示「已驗證」也不代表安全。
  • 檢查 Python 的 site-packages 資料夾裡有沒有 *-setup.pth 或 _index.js,也檢查有沒有 /tmp/.bun_ran、/tmp/b-*/bun、/tmp/p*.js 這些檔案。
  • 檢查有沒有 update-monitor 或 gh-token-monitor 的 systemd 服務或 LaunchAgent,以及有沒有 ~/.local/share/updater/update.py;再看 /etc/hosts 裡有沒有含 stepsecurity 的條目。
  • 在你的 GitHub 組織裡搜尋:名為「Run Copilot」的工作流程、來路不明的 codeql.yml、oidc-* 分支,以及描述為「Hades - The End for the Damned」或「Miasma: The Spreading Blight」的程式庫。
  • 如果發現中毒跡象,先隔離機器或保存映像檔,再撤銷權杖,因為有報告指出撤銷權杖可能觸發刪除資料。接著更換該機器上所有的憑證。
08

keyv / cacheable(ChainDrop)

npm2026-08-01 → 2026-08-20 · OSV 紀錄 446 筆 · 446 個套件 · 2,270 個版本

keyv、flat-cache(每月下載量各約 6 億次)與 cacheable(每月約 3 千萬次)等快取套件被發布惡意版本,再經偷來的發布權杖擴散到 ServiceTitan、Qlik 等組織的數百個套件。各家統計約 384–446 個套件。

這一波的新手法:用以太坊智慧合約查詢伺服器位址、鎖定更多 AI 工具憑證、IDE 與 AI 助理自動啟動的掛鉤;惡意版本同樣帶有真的 SLSA 來源證明。

詳細:怎麼進來的、做了什麼、規模與歸因、怎麼檢查

怎麼進來的:多家報告指出維護者的 GitHub 帳號被控制,惡意程式碼直接推到 main,再由原本的受信任發布流程正常發布;帳號怎麼被拿下未經證實。

做了什麼:preinstall 執行 setup.mjs 下載 Bun 與第二階段程式,偷取雲端、GitHub、npm 與 AI 工具的憑證,用偷來的權杖感染受害者能發布的其他套件,並安裝 gh-token-monitor 常駐。

規模(各家數字不同): 444 個套件名稱(SafeDep [15]);2,234 個遭植入惡意程式的版本(SafeDep [15]);12 個組織的憑證遭濫用(SafeDep [15]);@servicetitan:147 個套件、1,082 個版本(SafeDep [15]);@onereach/@or-sdk:155 個套件、487 個版本(SafeDep [15]);@ornikar:47 個套件、537 個版本(SafeDep [15]);@qlik/@nebula.js:59 個套件(SafeDep [15]);至少 444 個套件(8 月 5 日更新)(Aikido Security [36]);1,381 個版本(8 月 5 日更新)(Aikido Security [36]);約 1,300 個用來存放偷來資料的儲存庫(Aikido Security [36]);444 個套件(OX Security [48]);以標記字串找到 821 個儲存庫(OX Security [48]);超過 400 個套件(JFrog Security Research [14]);超過 1,700 個版本(JFrog Security Research [14]);384 個套件(8 月 4 日太平洋夏令時間 11:00 更新)(Endor Labs [45]);1,136 個版本(8 月 4 日太平洋夏令時間 11:00 更新)(Endor Labs [45]);三個最早遭入侵的套件每週下載量合計約 5.15 億次(Endor Labs [45]);超過 400 個套件,每月下載量超過 13 億次(Elastic Security Labs [44]);超過 1,300 個版本,每月下載量合計約 20 億次(Cyber Security Agency of Singapore [43]);10 個核心套件;下游 400 到超過 2,200 個(原文沒說清楚是套件還是版本);「5 個確認的惡意版本」(原文措辭不明確)(Chainguard [42]);至少 10 個已確認的套件,清單仍在增加;每週下載量達數千萬次(Socket [28]);7 月下載量:keyv 6.197 億次、flat-cache 5.798 億次、file-entry-cache 5.712 億次(Snyk [23]);PlainCVE 的 OSV 快照中有 446 筆紀錄(2026-08-04 至 08-06 發布)(OSV / OpenSSF malicious-packages [9])

歸因: 手法和 Shai-Hulud「非常相似」,但沒有明確認定屬於哪個攻擊活動。(Socket [28]);這是「Mini」Shai-Hulud 的後代,程式碼大量來自 TeamPCP 公開的 Mini Shai-Hulud 開源儲存庫。這只說明程式碼的來源,不代表這次攻擊是 TeamPCP 發動的。(Wiz [55]);標記字串和利用 GitHub 儲存庫存放偷來資料的手法,與 2026 年 5 月的 TanStack 事件相同,但這個關聯只是「間接」證據。(SafeDep [15]);把 ChainDrop 視為 Shai-Hulud 家族的變種。(Cyber Security Agency of Singapore [43]);沒有人宣稱犯案,也沒有明確點名攻擊者;Chainguard 只在 5 月的 @antv 攻擊波提到 TeamPCP,並沒有把本次事件連到 TeamPCP。(Chainguard [42])

怎麼檢查:
  • 檢查 lockfile 和相依套件樹(包含間接相依與開發相依)有沒有這些版本:keyv 6.0.0、flat-cache 6.1.24、file-entry-cache 11.1.6(Socket 則說是 11.1.7)、cacheable 2.5.1、cacheable-request 13.0.20、cache-manager 7.2.10、ecto 5.0.1。已知安全的版本是 keyv 5.6.0、flat-cache 6.1.23、file-entry-cache 11.1.5。
  • 在 node_modules 裡搜尋 preinstall 設為「node setup.mjs」的 package.json,以及名為 Math_Symbol.js 或 math_init.js 的檔案。
  • 檢查電腦上有沒有 gh-token-monitor 相關檔案(~/.local/bin/gh-token-monitor.sh、LaunchAgent 或 systemd 服務)。如果有,必須先停用並刪除這個服務,再撤銷 GitHub 權杖,否則撤銷時會觸發攻擊者的指令。
  • 開啟儲存庫前,先檢查 .claude/settings.json 和 .vscode/tasks.json 有沒有被加入不明的 setup.mjs 自動執行設定。
  • 在自己或組織的 GitHub 帳號下,搜尋描述為「Shai-Hulud: Here We Go Again」的儲存庫、作者為 claude@users.noreply 的提交,以及含有 toJSON(secrets) 的工作流程。

其他(不在上列攻擊期間):OSV 紀錄 1 筆 · 1 個套件 · 1 個版本

下載資料

套件清單取自 OSV(osv.dev),每筆紀錄依其原始來源的授權條款提供;入侵指標整理自各份公開報告。封鎖或偵測前請先自行確認。

入侵指標

(237)

只列公開報告中發布的指標,每一項附出處。網域與網址已加上 [.] 避免誤點。

類型指標說明攻擊
雜湊46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09bundle.js 的 SHA-256(Wiz、StepSecurity、Socket、Unit 42 都有公布)第 1 次攻擊[58]
雜湊de0e25a3e6c1e1e5998b306b7141b3dc4c0088da9d7bb47c1c00c91e6e4f85d6bundle.js 的 SHA-256(Semgrep 公布)第 1 次攻擊[22]
雜湊81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3bundle.js 的 SHA-256(Semgrep 公布)第 1 次攻擊[22]
雜湊83a650ce44b2a9854802a7fb4c202877815274c129af49e6c2d1d5d5d55c501ebundle.js 的 SHA-256(Semgrep 公布)第 1 次攻擊[22]
雜湊4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538dbbundle.js 的 SHA-256(Semgrep 公布)第 1 次攻擊[22]
雜湊dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210cbundle.js 的 SHA-256(Semgrep 公布)第 1 次攻擊[22]
雜湊b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777bundle.js 的 SHA-256(Semgrep 公布)第 1 次攻擊[22]
網址webhook[.]site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7資料外洩網址(已去活化寫法)第 1 次攻擊[58]
GitHub 工作流程.github/workflows/shai-hulud-workflow.yml惡意工作流程,每次 push 都會外洩程式碼庫機密第 1 次攻擊[51]
檔名bundle.js由 postinstall 執行的惡意程式第 1 次攻擊[31]
檔名data.json放在「Shai-Hulud」程式碼庫裡的外洩資料第 1 次攻擊[31]
檔案路徑/tmp/processor.sh攻擊期間寫入的腳本第 1 次攻擊[58]
檔案路徑/tmp/migrate-repos.sh把私人程式碼庫複製成公開程式碼庫的腳本第 1 次攻擊[58]
GitHub repoShai-Hulud受害者帳號裡存放外洩資料的公開程式碼庫第 1 次攻擊[58]
GitHub repo-migration被公開的私人程式碼庫所用的名稱後綴第 1 次攻擊[58]
其他Shai-Hulud Migration被公開的程式碼庫所用的說明文字第 1 次攻擊[58]
其他Shai-Hulud RepositorySemgrep 建議的 GitHub 搜尋關鍵字第 1 次攻擊[22]
其他Shai-Hulud-MigrationSemgrep 建議的 GitHub 搜尋關鍵字第 1 次攻擊[22]
檔名setup_bun.js載入程式(安裝時執行)第 2 次攻擊[53]
檔名bun_environment.js混淆過的主要惡意程式第 2 次攻擊[53]
安裝腳本"preinstall": "node setup_bun.js"package.json 中被植入的安裝腳本第 2 次攻擊[53]
檔名cloud.json外洩資料檔(Wiz 列出)第 2 次攻擊[57]
檔名contents.json外洩資料檔(Wiz 列出)第 2 次攻擊[57]
檔名environment.json外洩資料檔(環境變數)第 2 次攻擊[57]
檔名truffleSecrets.json外洩資料檔(TruffleHog 找到的密鑰)第 2 次攻擊[57]
檔名actionsSecrets.json外洩資料檔(GitHub Actions 密鑰),Golden Path 改版也有第 2 次攻擊[57]
檔名system.json外洩資料檔(StepSecurity 列出)第 2 次攻擊[53]
檔名secrets.json外洩資料檔(StepSecurity 列出)第 2 次攻擊[53]
檔名npm.json外洩資料檔(StepSecurity 列出)第 2 次攻擊[53]
檔案路徑$HOME/.dev-env/惡意自架 runner 的安裝位置第 2 次攻擊[53]
程序 / 服務SHA1HULUD惡意自架 GitHub Actions runner 的名稱第 2 次攻擊[53]
GitHub 工作流程.github/workflows/discussion.yaml長期控制用的工作流程(名稱「Discussion Create」)第 2 次攻擊[57]
GitHub 工作流程.github/workflows/formatter_123456789.yml惡意工作流程(只有 Wiz 列出)第 2 次攻擊[57]
其他Sha1-Hulud: The Second Coming外洩用儲存庫的說明文字(Datadog 的版本結尾多一個句點)第 2 次攻擊[53]
其他Sha1-Hulud: The Continued Coming可能是第二階段的儲存庫說明文字第 2 次攻擊[57]
其他# Free AI at api.airforce後來出現的儲存庫說明文字第 2 次攻擊[57]
GitHub repo[0-9a-z]{18}外洩用儲存庫的隨機名稱格式第 2 次攻擊[21]
其他GET /-/whoami用偷來的權杖確認 npm 帳號身分第 2 次攻擊[21]
其他GET /-/v1/search?text=maintainer%3A[username]&size=100搜尋受害者維護的套件(最多 100 個)第 2 次攻擊[21]
雜湊a3894003ad1d293ba96d77881ccd2071446dc3f65f434669b49b3da92421901asetup_bun.js 的 SHA256第 2 次攻擊[21]
雜湊62ee164b9b306250c1172583f138c9614139264f889fa99614903c12755468d0bun_environment.js 的 SHA256第 2 次攻擊[21]
雜湊cbb9bc5a8496243e02f3cc080efbe3e4a1430ba0671f2e43a202bf45b05479cdbun_environment.js 的 SHA256第 2 次攻擊[21]
雜湊f099c5d9ec417d4445a0328ac0ada9cde79fc37410914103ae9c609cbc0ee068bun_environment.js 的 SHA256第 2 次攻擊[21]
雜湊d60ec97eea19fffb4809bc35b91033b52490ca11bun_environment.js 的 SHA1(Socket 也列給 Maven 套件)第 2 次攻擊[57]
雜湊3d7570d14d34b0ba137d502f042b27b0f37a59fabun_environment.js 的 SHA1第 2 次攻擊[57]
雜湊d1829b4708126dcc7bea7437c04d1f10eacd4a16setup_bun.js 的 SHA1第 2 次攻擊[57]
其他org.mvnpm:posthog-node:4.18.1受感染並被自動轉進 Maven Central 的套件第 2 次攻擊[30]
其他@vietmoney/react-big-calendarGolden Path 改版所在的 npm 套件(版本未確認)第 2 次攻擊[39]
檔名bun_installer.jsGolden Path 改版的載入程式第 2 次攻擊[39]
檔名environment_source.jsGolden Path 改版的主要惡意程式第 2 次攻擊[39]
檔名3nvir0nm3nt.jsonGolden Path 外洩資料檔第 2 次攻擊[39]
檔名cl0vd.jsonGolden Path 外洩資料檔第 2 次攻擊[39]
檔名c9nt3nts.jsonGolden Path 外洩資料檔(程式碼中拼作 c0nt3nts.json,待確認)第 2 次攻擊[39]
檔名pigS3cr3ts.jsonGolden Path 外洩資料檔第 2 次攻擊[39]
其他Goldox-T3chs: Only Happy GirlGolden Path 外洩用儲存庫的說明文字第 2 次攻擊[39]
檔名setup.mjsSAP 那一波的安裝腳本/下載器第 3 次攻擊[16]
檔名execution.jsSAP 那一波的混淆惡意程式第 3 次攻擊[16]
檔案路徑.vscode/tasks.json開啟資料夾時自動執行的潛伏設定第 3 次攻擊[16]
檔案路徑.claude/setup.mjs由 tasks.json 執行的潛伏腳本第 3 次攻擊[16]
安裝腳本"preinstall": "node setup.mjs"SAP 惡意版本的安裝腳本第 3 次攻擊[16]
檔案路徑lightning/_runtime/start.pyLightning 惡意程式的啟動腳本第 3 次攻擊[25]
檔案路徑lightning/_runtime/router_runtime.jsLightning 的混淆惡意程式第 3 次攻擊[25]
檔案路徑.claude/router_runtime.jsLightning 那一波植入儲存庫的惡意程式副本第 3 次攻擊[25]
檔案路徑.claude/settings.json被濫用的 Claude Code 設定檔(潛伏)第 3 次攻擊[25]
GitHub 工作流程.github/workflows/format-check.ymlLightning 那一波植入的 workflow第 3 次攻擊[25]
雜湊5f5852b5f604369945118937b058e49064612ac69826e0adadca39a357dfb5b1router_runtime.js 的 SHA256第 3 次攻擊[25]
雜湊f1b3e7b3eec3294c4d6b5f87854a52471f03997frouter_runtime.js 的 SHA1第 3 次攻擊[25]
雜湊40d0f21b64ec8fb3a7a1959897252e09router_runtime.js 的 MD5第 3 次攻擊[25]
雜湊8046a11187c135da6959862ff3846e99ad15462d2ec8a2f77a30ad53ebd5dcf2start.py 的 SHA256第 3 次攻擊[37]
網址zero[.]masscan[.]cloud:443/v1/telemetryLightning 回傳資料端點(僅新聞報導,未證實)第 3 次攻擊[33]
commit 作者"claude" <claude@users.noreply.github.com>假冒 Claude Code 的提交作者第 3 次攻擊[25]
其他A Mini Shai-Hulud has Appeared存放偷來資料的儲存庫描述(SAP/Lightning)第 3 次攻擊[41]
檔名router_init.js約 2.3 MB 的混淆惡意程式第 4 次攻擊[4]
網域filev2[.]getsession[.]org外傳網域(官方公告)第 4 次攻擊[4]
安裝腳本@tanstack/setup (optionalDependencies)被注入的相依套件第 4 次攻擊[4]
檔案路徑.vscode/setup.mjs@antv 那一波植入的檔案第 5 次攻擊[17]
檔案路徑.claude/index.js@antv 那一波植入的惡意程式第 5 次攻擊[17]
檔案路徑~/.claude/package/index.js家目錄中的惡意程式副本第 5 次攻擊[17]
程序 / 服務kitty-monitor.serviceLinux 上的潛伏系統服務第 5 次攻擊[17]
檔名com.user.kitty-monitor.plistmacOS 上的潛伏 LaunchAgent第 5 次攻擊[17]
檔案路徑~/.local/share/kitty/cat.py潛伏服務執行的腳本第 5 次攻擊[17]
檔案路徑~/.local/bin/gh-token-monitor.sh每 60 秒檢查偷來 GitHub 權杖的腳本第 5 次攻擊[17]
檔案路徑/var/tmp/.gh_update_state惡意程式的狀態檔第 5 次攻擊[17]
雜湊a68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c@antv 惡意程式的 SHA256第 5 次攻擊[17]
安裝腳本bun run index.js@antv 惡意版本的 preinstall 腳本第 5 次攻擊[17]
安裝腳本bun run index.js && exit 1@antv/setup 相依套件的 prepare 腳本第 5 次攻擊[17]
網域t[.]m-kosche[.]com@antv 回傳資料網域第 5 次攻擊[24]
網址hxxps://t[.]m-kosche[.]com:443/api/public/otel/v1/traces偽裝成 OpenTelemetry 的回傳端點第 5 次攻擊[24]
其他Shai-Hulud: Here We Go Again存放偷來資料的儲存庫描述(@antv)第 5 次攻擊[24]
檔案路徑results/results-*.json存放偷來資料的儲存庫中的檔案第 5 次攻擊[24]
GitHub reposayyadina-stillsuit-852沙丘主題名稱的資料外傳儲存庫範例第 5 次攻擊[24]
GitHub 工作流程.github/workflows/codeql.yml名為「Run Copilot」、傾印機密的 workflow第 5 次攻擊[17]
雜湊1916faa365f2788b6e193514872d51a242876569antvis/G2 中的假冒提交第 5 次攻擊[17]
雜湊7cb42f57561c321ecb09b4552802ae0ac55b3a7aantvis/G2 中的假冒提交第 5 次攻擊[17]
雜湊dc3d62a2181beb9f326952a2d212900c94f2e13dantvis/G2 中的假冒提交第 5 次攻擊[17]
網域87e0bbc636999b[.]lhr[.]life模仿者的 C2 伺服器第 5 次攻擊[49]
網域b94b6bcfa27554[.]lhr[.]life模仿者的 C2 伺服器第 5 次攻擊[49]
網域edcf8b03c84634[.]lhr[.]life模仿者的 C2 伺服器第 5 次攻擊[49]
IP80[.]200[.]28[.]28:2222模仿者的 C2 伺服器第 5 次攻擊[49]
其他A Mini Sha1-Hulud has Appeared模仿者資料外傳儲存庫的描述第 5 次攻擊[49]
commit 作者claude <claude@users.noreply.github.com>惡意 commit 的假冒作者第 6 次攻擊[13]
commit 作者dependabot[bot]被假冒的機器人身分第 6 次攻擊[11]
commit 作者renovate[bot]被假冒的機器人身分第 6 次攻擊[11]
commit 作者github-actions[bot]被假冒的機器人身分第 6 次攻擊[11]
檔案路徑tools/setup惡意程式(dropper)位置第 6 次攻擊[13]
檔案路徑.github/scripts/precheck惡意程式(dropper)位置第 6 次攻擊[13]
安裝腳本"preinstall": "./tools/setup"執行惡意程式的安裝鉤子第 6 次攻擊[13]
檔案路徑/var/run/secrets/kubernetes.io/serviceaccount/token被搜刮的 Kubernetes 權杖路徑第 6 次攻擊[11]
檔名format-results.txt工作流程匯出 secrets 的產出檔第 6 次攻擊[13]
網址hxxp://127[.]0[.]0[.]1:8738本機錢包竊取監聽埠第 6 次攻擊[13]
其他/api/agentTor 隱藏服務上的指揮控制路徑第 6 次攻擊[13]
檔名q2.bpf.crootkit 原始碼檔名第 6 次攻擊[13]
其他0x7e28D9889f414B06c19a22A9Bd316f0AC279a4d6操作者自己的以太坊地址(幾乎沒有餘額)第 6 次攻擊[13]
其他weavedb-lite@0.1.1惡意 npm 版本第 6 次攻擊[13]
其他weavedb-sdk-base@0.21.1惡意 npm 版本第 6 次攻擊[13]
其他test-weavedb-sdk@1.1.1惡意 npm 版本第 6 次攻擊[13]
其他weavedb-warp-contracts-plugin-deploy@1.0.11惡意 npm 版本第 6 次攻擊[13]
其他arnext-arkb@0.0.2惡意 npm 版本第 6 次攻擊[13]
其他weavedb-console@0.2.1惡意 npm 版本第 6 次攻擊[13]
其他arnext@0.1.5惡意 npm 版本第 6 次攻擊[13]
其他roidjs@0.1.7惡意 npm 版本第 6 次攻擊[13]
其他weavedb-exm-sdk@0.7.4惡意 npm 版本第 6 次攻擊[13]
其他create-arnext-app@0.0.10惡意 npm 版本第 6 次攻擊[13]
其他weavedb-tools@0.45.3惡意 npm 版本第 6 次攻擊[13]
其他wdb-core@0.1.2惡意 npm 版本第 6 次攻擊[13]
其他cwao-tools@0.3.1惡意 npm 版本第 6 次攻擊[13]
其他test-ajs@0.1.19惡意 npm 版本第 6 次攻擊[13]
其他monade@0.0.7惡意 npm 版本第 6 次攻擊[13]
其他weavedb-exm-sdk-web@0.7.4惡意 npm 版本第 6 次攻擊[13]
其他testnpmnmp@1.0.21惡意 npm 版本第 6 次攻擊[13]
其他warp-contracts-plugin-deploy-test@3.0.1惡意 npm 版本第 6 次攻擊[13]
其他wdb-cli@0.1.1惡意 npm 版本第 6 次攻擊[13]
其他ai3@0.3.5惡意 npm 版本(與 OSV MAL-2026-4476 相符)第 6 次攻擊[10]
其他cwao-units@0.8.3惡意 npm 版本第 6 次攻擊[13]
其他atomic-notes@0.5.3惡意 npm 版本第 6 次攻擊[13]
其他cwao@0.5.6惡意 npm 版本第 6 次攻擊[13]
其他weavedb-client@0.45.3惡意 npm 版本第 6 次攻擊[13]
其他wdb-sdk@0.1.2惡意 npm 版本第 6 次攻擊[13]
其他weavedb-offchain@0.45.4惡意 npm 版本第 6 次攻擊[13]
其他fpjson-lang@0.1.7惡意 npm 版本第 6 次攻擊[13]
其他weavedb-contracts@0.45.2惡意 npm 版本第 6 次攻擊[13]
其他weavedb-node-client@0.45.3惡意 npm 版本第 6 次攻擊[13]
其他arjson@0.1.4惡意 npm 版本第 6 次攻擊[13]
其他hbsig@0.3.2惡意 npm 版本第 6 次攻擊[13]
其他zkjson@0.8.5惡意 npm 版本第 6 次攻擊[13]
其他aonote@0.11.1惡意 npm 版本第 6 次攻擊[13]
其他weavedb-base@0.45.3惡意 npm 版本第 6 次攻擊[13]
其他weavedb-sdk-node@0.45.3惡意 npm 版本第 6 次攻擊[13]
其他wao@0.41.2惡意 npm 版本第 6 次攻擊[13]
其他weavedb-sdk@0.45.3惡意 npm 版本第 6 次攻擊[13]
檔案路徑/tmp/p<random>.jsnpm 載入器暫存檔第 7 次攻擊[18]
檔案路徑/tmp/b-<random>/bun下載的 Bun 執行檔第 7 次攻擊[18]
檔案路徑/tmp/kitty-<random>背景執行程序第 7 次攻擊[18]
檔案路徑/tmp/b-*/b.zipBun 下載壓縮檔第 7 次攻擊[26]
檔案路徑/tmp/b-*/bun.exeBun 執行檔(Windows)第 7 次攻擊[26]
檔名tmp.0987654321.lock背景執行鎖定檔第 7 次攻擊[26]
檔名*-setup.pthPython 啟動掛鉤第 7 次攻擊[29]
檔名_index.js主要惡意程式第 7 次攻擊[29]
檔案路徑/tmp/.bun_ran只執行一次的標記檔第 7 次攻擊[29]
檔案路徑%TEMP%\.bun_ran只執行一次的標記檔(Windows)第 7 次攻擊[29]
檔案路徑/tmp/b.zipBun 下載壓縮檔第 7 次攻擊[29]
檔案路徑/tmp/b/bunBun 執行檔第 7 次攻擊[29]
檔案路徑/tmp/bunBun 執行檔第 7 次攻擊[5]
檔案路徑/tmp/bun.zipBun 下載壓縮檔第 7 次攻擊[5]
檔名langchain_core-setup.pth拆分式載入器第 7 次攻擊[27]
檔名ensmallen_haswell.abi3.so植入惡意程式的編譯模組第 7 次攻擊[27]
檔名ensmallen_core2.abi3.so植入惡意程式的編譯模組第 7 次攻擊[27]
檔案路徑/tmp/.sshu-setup.jsSSH 橫向擴散用的複本第 7 次攻擊[27]
檔案路徑/tmp/tmp.0144018410.lock鎖定檔第 7 次攻擊[54]
檔案路徑~/.local/share/updater/update.py每小時輪詢的 GitHub 指揮控制程式第 7 次攻擊[54]
檔案路徑~/.config/systemd/user/update-monitor.serviceLinux 常駐服務第 7 次攻擊[54]
檔案路徑~/.config/systemd/user/gh-token-monitor.service監控權杖的常駐服務第 7 次攻擊[54]
檔案路徑~/Library/LaunchAgents/com.user.update-monitor.plistmacOS 常駐設定第 7 次攻擊[54]
檔案路徑~/Library/LaunchAgents/com.user.gh-token-monitor.plistmacOS 常駐設定第 7 次攻擊[54]
檔案路徑~/.config/gh-token-monitor/token被盜權杖的存放檔第 7 次攻擊[54]
檔案路徑~/Library/LaunchAgents/com.github.token-monitor.plistmacOS 常駐設定(Socket 報告的名稱)第 7 次攻擊[29]
檔案路徑.gemini/settings.json植入程式庫的 AI 工具掛鉤第 7 次攻擊[46]
其他Miasma: The Spreading Blight外傳資料程式庫的描述(npm)第 7 次攻擊[18]
其他Hades - The End for the Damned外傳資料程式庫的描述(PyPI)第 7 次攻擊[29]
其他stygian, tartarean, cerberus, charon, styx, lethe, thanatos, persephone外傳資料程式庫的命名用字第 7 次攻擊[29]
GitHub repothanatatos-<random>外傳資料程式庫名稱(O3 的拼法)第 7 次攻擊[5]
GitHub repostygian-cerberus-[0-9]+外傳資料程式庫名稱格式第 7 次攻擊[54]
GitHub repotartarean-charon-[0-9]+外傳資料程式庫名稱格式第 7 次攻擊[54]
GitHub repolethean-tartarus-61322, abyssal-acheron-97481, charonian-phlegethon-92465, cimmerian-cerberus-93715, erebean-eidolon-54723, funereal-thanatos-2755, plutonian-erebus-24120, nekyian-charon-76242外傳資料程式庫名稱範例第 7 次攻擊[46]
其他results/results-<timestamp>-<counter>.json加密後外傳的資料檔第 7 次攻擊[29]
其他IfYouInvalidateThisTokenItWillNukeTheComputerOfTheOwner提交訊息標記(npm)第 7 次攻擊[26]
其他IfYouYankThisTokenItWillNukeTheComputerOfTheOwnerFully提交訊息標記(Hades)第 7 次攻擊[29]
其他firedalazerPython 指揮控制通道的名稱/關鍵字第 7 次攻擊[54]
其他actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd注入工作流程中釘選的 action 版本第 7 次攻擊[18]
GitHub 工作流程.github/workflows/codeql-[random].yml注入的工作流程第 7 次攻擊[54]
GitHub 工作流程Run Copilot注入的工作流程名稱第 7 次攻擊[29]
其他format-results用來外傳資料的 Actions 成品第 7 次攻擊[29]
其他setup-bun@0c5077e注入的工作流程步驟第 7 次攻擊[46]
程序 / 服務__IS_DAEMON=1背景執行時設定的環境變數第 7 次攻擊[18]
其他python-requests/2.31.0網路請求的 User-Agent第 7 次攻擊[26]
其他Bun/1.3.13PyPI 上傳時的 User-Agent第 7 次攻擊[46]
其他Bun/1.3.14PyPI 上傳時的 User-Agent第 7 次攻擊[27]
雜湊88896d478986d453f5da79b311de39d9b4b1bea95c21af1d8ef181b0f4e52fe9@redhat-cloud-services/chrome 2.3.1 套件壓縮檔第 7 次攻擊[26]
雜湊21b6409a7b84446310daca5409ad6112ac60a1e4bef97736e53fff5f63bfdef4chrome 2.3.1 的 index.js第 7 次攻擊[26]
雜湊ee262510cb246d2b904991aee7fc61162bdae34463439ec6383bd5356479d362chrome 2.3.1 的 package.json第 7 次攻擊[26]
雜湊ac2a2208e1726e008be6c73dc0872d9bba163319259dff1b62055ac933ca46b6Bun 輔助程式第 7 次攻擊[26]
雜湊0dc06ecdaa63fe24859cfd955053c23245c536e4733480239d14bebf12688e35解密後的主程式(Socket 與 SafeDep 報告的值相同)第 7 次攻擊[18]
雜湊031ba872d5a84bfb18115f432811e4b45180346a1bae653f7fd85f918e7bb3a3patch-client 4.0.4 套件壓縮檔第 7 次攻擊[18]
雜湊df1732f5bfec12e066be44dee02ec8a243e4868d38672c1b1d065359dd735a14patch-client 4.0.4 的 index.js第 7 次攻擊[18]
雜湊dc48b09b2a5954f7ff79ab8a2fd80202bd3b59c08c7cdbc6025aa923cb4c0efe_index.js 變體 1第 7 次攻擊[29]
雜湊e1342a80d4b5e83d2c7c22e1e0aaa95f2d88e3dbf0d853a4994b180c93a4b17d_index.js 變體 2第 7 次攻擊[29]
雜湊c539766062555d47716f8432e73adbe3a0c0c954a0b6c4005017a668975e275c*-setup.pth第 7 次攻擊[29]
雜湊6d332f814f15f19758d65026bbfd0a8c49671b319ec77b8fa1b27fc48afff7d9langchain_core_mcp-1.4.2 wheel 檔第 7 次攻擊[27]
雜湊6506d31707a39949f89534bf9705bcf889f1ecae3dbc6f4ff88d67a8be3d01b2langchain_core-setup.pth第 7 次攻擊[27]
雜湊54dc7ea54a1317cca0e890a2770630cf7fa6c97813e0cb9d2caa93012b350668npm 套件內的 setup.mjs 載入器(第一波,SHA-256)第 8 次攻擊[28]
雜湊fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1eb後期擴散版本的 setup.mjs 載入器(SHA-256)第 8 次攻擊[36]
雜湊9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bccMath_Symbol.js/math_init.js 第二階段惡意程式(SHA-256)第 8 次攻擊[44]
雜湊927387d0cfac1118df4b383decc2ea6ba49c9d2f98b47098bcbcba1efc026e1f惡意 .vscode/tasks.json(SHA-256)第 8 次攻擊[20]
雜湊14eb4ce01dd4307759887ff819359b70d7d9ff709ecde039a5abc1aac325b128惡意 .claude/settings.json(SHA-256)第 8 次攻擊[20]
雜湊d584f9b6af48b7ed1f93713944f033783bf149e1c25e1643eb8c0e9df5dc7782keyv-6.0.0.tgz(SHA-256)第 8 次攻擊[23]
雜湊37f9f847e9c3e520b47d83a9029e199dbc30c6a195a1d80467d0fb1a6fd5068728ad4d1a422995ca578359263afdac5d3b4fed7a6b9befad27de19cca6966952keyv-6.0.0.tgz(SHA-512,十六進位)第 8 次攻擊[28]
雜湊sha512-N/n4R+nD5SC0fYOpAp4ZnbwwxqGVodgEZ9D7Gm/VBocorU0aQimVyleDWSY6/axdO0/temub760n3hnMppZpUg==keyv@6.0.0 在 lockfile 中的 integrity 值第 8 次攻擊[15]
雜湊35a672cf34b996b91f3e1c28cbf3a05a37e036e4Math_Symbol.js/math_init.js(40 字元雜湊,看起來是 SHA-1,Wiz 未標明演算法)第 8 次攻擊[55]
雜湊686aa40d0fc22c8d569494543a0f891f359f2f99.claude 內的 setup.mjs(看起來是 SHA-1)第 8 次攻擊[55]
雜湊f525d52ceb966516686b482d3dc0137028cc6a63.vscode 內的 setup.mjs(看起來是 SHA-1)第 8 次攻擊[55]
網域npm-cache[.]com攻擊者伺服器網域(Aikido 指出 2026-05-22 註冊)第 8 次攻擊[36]
網址hxxps://npm-cache[.]com:443/router外傳資料的網址第 8 次攻擊[36]
IP104[.]21[.]35[.]216npm-cache[.]com 解析到的 IP(Cloudflare)第 8 次攻擊[55]
網域awqhnjewqjkl[.]icu攻擊者伺服器網域第 8 次攻擊[44]
網域pypi-get[.]com攻擊者伺服器網域第 8 次攻擊[55]
網域js-mirror[.]com攻擊者伺服器網域第 8 次攻擊[55]
其他0xE1f2395ee43e45A1556EC6438a88c31B83493103用來查詢攻擊者伺服器位址的以太坊智慧合約第 8 次攻擊[44]
檔名Math_Symbol.js第一波套件內的第二階段惡意程式第 8 次攻擊[36]
檔名math_init.js後期感染套件內的第二階段惡意程式第 8 次攻擊[36]
檔名router_runtime.js套件內的可疑檔案(只有 OX 列出)第 8 次攻擊[48]
檔案路徑~/.config/gh-token-monitor/{token,handler,started_at}監看服務的設定與偷來的權杖第 8 次攻擊[28]
檔案路徑/tmp/tmp.dpkg_14527.lock確保只執行一份的鎖定檔第 8 次攻擊[14]
程序 / 服務com.user.gh-token-monitormacOS LaunchAgent 標籤第 8 次攻擊[28]
程序 / 服務GitHub Token Validity Monitorsystemd 服務描述第 8 次攻擊[28]
commit 作者claude@users.noreply.github.com惡意提交的作者(提交訊息為 chore: update config)第 8 次攻擊[36]
其他thebeautifulmarchoftime惡意程式的標記字串第 8 次攻擊[48]
其他IfYouBlockThisAPIKeyItWillCrashTheLiveProductionServersOfAllThirdPartyClients阻止人撤銷權杖的恐嚇字串第 8 次攻擊[48]

為什麼大多沒有 CVE

這類事件不是軟體本身有漏洞,而是發布管道被接管,所以多半以 OSV 的惡意套件編號(MAL-)或 GitHub 安全公告追蹤。只有少數有 CVE,例如 TanStack(CVE-2026-45321)與 SAP @cap-js(CVE-2026-46421)。其中 TanStack 另外被 CISA 列入 KEV;KEV 收錄的條件是有實際遭利用的證據,不是有 CVE 就會列入。

手法怎麼演變

  • 2025 年: 從 postinstall 腳本、TruffleHog 找機密、把資料放進公開 repo 開始;第二波改在 preinstall 執行、改用 Bun,並加入刪除家目錄的破壞功能。
  • 2026 年(Mini Shai-Hulud): 攻擊重心轉向 CI 發布流程與 npm 受信任發布(OIDC),惡意版本帶有真的來源證明與簽章;常駐位置轉到 AI 工具設定(.claude/.vscode/),commit 假冒 AI 助理。
  • 擴散到其他生態系: PyPI(.pth 啟動掛鉤)、Rust 改寫的 IronWorm,以及用以太坊智慧合約查詢伺服器位址的 keyv 攻擊。
  • 歸因不確定: 研究機構把 2026 年多數攻擊連到 TeamPCP,但攻擊程式碼已外流、也出現模仿者,單一攻擊的攻擊者不一定相同。

重點:「有簽章、有來源證明」只代表套件出自哪條流程,不代表內容安全。

資料與方法

受影響套件清單來自 OSV(開源漏洞資料庫)中提到此攻擊活動的紀錄(比對 summary、details 與參考連結,規則:sha[i1]-?hulud),取自 PlainCVE 2026-09-23 的快照。每次攻擊依發布日期劃分。數字是「OSV 已收錄的紀錄」,不等於實際受害規模;各研究機構的統計方式不同,數字也不同。

驗證紀錄 已人工審稿、核對來源;尚未在我們的環境重現

人工審稿2026-09-24

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

來源

  1. 安全公告Widespread Supply Chain Compromise Impacting npm Ecosystem · CISA, 2025-09-23 · 查閱 2026-09-23
  2. 安全公告Trojanized pantheon-agents 0.6.1 and 0.6.2 on PyPI ship a credential stealer · GitLab Advisory Database, 2026-08-26 · 查閱 2026-09-23
  3. 廠商說明Our plan for a more secure npm supply chain · GitHub, 2025-09-22 · 查閱 2026-09-23
  4. 安全公告GHSA-g7cv-rxg3-hmpx: Malware in 42 @tanstack/* packages · TanStack (GitHub), 2026-05-11 · 查閱 2026-09-23
  5. 研究文章5 Malicious PyPI Packages Found Stealing Credentials via Hidden .pth Files (Miasma Campaign) · O3 Security, 2026-06-08 · 查閱 2026-09-23
  6. 研究文章TeamPCP Compromises AntV and 322 Other NPM Packages · OpenSourceMalware, 2026-05-20 · 查閱 2026-09-23
  7. CVE / NVD / OSVOSV: open source vulnerability database (malicious package records) · OpenSSF / Google · 查閱 2026-09-23
  8. 安全公告GHSA-93qj-5q5v-3c2h: Trojanized pantheon-agents 0.6.1 and 0.6.2 on PyPI · OSV, 2026-08-26 · 查閱 2026-09-23
  9. 安全公告MAL-2026-11524: Malicious code in keyv (npm) · OSV / OpenSSF malicious-packages, 2026-08-04 · 查閱 2026-09-23
  10. 安全公告MAL-2026-4476: Malicious code in ai3 (npm) · OSV / OpenSSF Malicious Packages, 2026-05-26 · 查閱 2026-09-23
  11. 廠商說明IronWorm (No CVE): Rust-Built npm Worm Ships an eBPF Rootkit, Tor C2, and a Self-Propagating Supply Chain Implant Across 37 Packages · Phoenix Security, 2026-06-04 · 查閱 2026-09-23
  12. 廠商說明Post-mortem of Shai-Hulud attack on November 24th, 2025 · PostHog, 2025-11-26 · 查閱 2026-09-23
  13. 研究文章IronWorm: Shai-Hulud's rustier cousin · JFrog Security Research, 2026-06-03 · 查閱 2026-09-23
  14. 研究文章Major Shai Hulud campaign strikes npm again, affecting keyv and 400+ packages · JFrog Security Research, 2026-08-04 · 查閱 2026-09-23
  15. 研究文章keyv and cacheable npm compromise: 400+ packages · SafeDep, 2026-08-04 · 查閱 2026-09-23
  16. 研究文章Mini Shai Hulud and SAP Compromise · SafeDep, 2026-04-29 · 查閱 2026-09-23
  17. 研究文章Mini Shai-Hulud Strikes Again: 317 npm Packages Compromised · SafeDep, 2026-05-19 · 查閱 2026-09-23
  18. 研究文章Mini Shai-Hulud "Miasma: The Spreading Blight" Hits @redhat-cloud-services · SafeDep, 2026-06-01 · 查閱 2026-09-23
  19. 廠商說明IronWorm — Campaign — SafeDep Threat Intelligence · SafeDep · 查閱 2026-09-23
  20. 研究文章'ChainDrop' worm compromises hundreds of popular npm packages · Datadog Security Labs, 2026-08-04 · 查閱 2026-09-23
  21. 研究文章The Shai-Hulud 2.0 npm worm: analysis, and what you need to know · Datadog Security Labs, 2025-11-25 · 查閱 2026-09-23
  22. 研究文章Security Advisory: NPM packages using secret scanning tools to steal credentials · Semgrep, 2025-09-15 · 查閱 2026-09-23
  23. 研究文章Inside the keyv npm Compromise: preinstall Malware, Trusted Provenance, and IDE Hooks · Snyk, 2026-08-04 · 查閱 2026-09-23
  24. 研究文章Mini Shai-Hulud Hits @antv Ecosystem, 639 Compromised npm Package Versions · Socket, 2026-05-19 · 查閱 2026-09-23
  25. 研究文章PyTorch Lightning PyPI Package Compromised in Supply Chain Attack · Socket, 2026-04-30 · 查閱 2026-09-23
  26. 研究文章Mini Shai-Hulud Campaign Hits Red Hat Cloud Services npm Packages · Socket, 2026-06-01 · 查閱 2026-09-23
  27. 研究文章Mini Shai-Hulud, Miasma, and Hades Worms Target Bioinformatics and MCP Developers via Malicious PyPI Wheels · Socket, 2026-06-08 · 查閱 2026-09-23
  28. 研究文章Popular npm Packages in the keyv and Cacheable Namespaces Compromised in Active Supply Chain Attack · Socket, 2026-08-04 · 查閱 2026-09-23
  29. 研究文章Shai-Hulud Descends to Hades: Miasma Worm Campaign Spreads with New PyPI Wave · Socket, 2026-06-07 · 查閱 2026-09-23
  30. 研究文章Shai Hulud Strikes Again (v2) · Socket, 2025-11-24 · 查閱 2026-09-23
  31. 研究文章Tinycolor supply chain attack affects 40 packages · Socket, 2025-09-15 · 查閱 2026-09-23
  32. 新聞報導Shai-Hulud v2 Spreads From npm to Maven, as Campaign Exposes Thousands of Secrets · The Hacker News, 2025-11-26 · 查閱 2026-09-23
  33. 新聞報導PyTorch Lightning and Intercom-client Hit in Supply Chain Attacks to Steal Credentials · The Hacker News, 2026-04-30 · 查閱 2026-09-23
  34. 新聞報導IronWorm and New Miasma Worm Variant Hit npm in Supply Chain Attacks · The Hacker News, 2026-06-05 · 查閱 2026-09-23
  35. 研究文章"Shai-Hulud" Worm Compromises npm Ecosystem in Supply Chain Attack · Palo Alto Networks Unit 42, 2025-11-25 · 查閱 2026-09-23
  36. 研究文章Keyv and friends compromised in active Shai-Hulud supply chain attack · Aikido Security, 2026-08-04 · 查閱 2026-09-23
  37. 研究文章Popular PyTorch Lightning Package Compromised by Mini Shai-Hulud · Aikido Security, 2026-04-30 · 查閱 2026-09-23
  38. 研究文章S1ngularity/nx attackers strike again · Aikido Security, 2025-09-16 · 查閱 2026-09-23
  39. 研究文章Shai Hulud strikes again - The golden path · Aikido Security, 2025-12-28 · 查閱 2026-09-23
  40. 研究文章Shai Hulud Launches Second Supply-Chain Attack: Zapier, ENS, AsyncAPI, PostHog, Postman Compromised · Aikido Security, 2025-11-24 · 查閱 2026-09-23
  41. 新聞報導Official SAP npm packages compromised to steal credentials · BleepingComputer, 2026-04-29 · 查閱 2026-09-23
  42. 研究文章The keyv and cacheable npm Supply Chain Attack: Inside the Mini Shai-Hulud Campaign · Chainguard, 2026-08-04 · 查閱 2026-09-23
  43. 安全公告Ongoing npm Supply Chain Attack Affecting Keyv and Related Packages ("Shai-Hulud" Worm) · Cyber Security Agency of Singapore, 2026-08-06 · 查閱 2026-09-23
  44. 研究文章Shai-Hulud strikes again: CHAINDROP worm hits 400+ npm packages · Elastic Security Labs, 2026-08-06 · 查閱 2026-09-23
  45. 研究文章NPM Malware Compromises keyv and cacheable with 500M+ Weekly Downloads and Spreads to Hundreds of Packages · Endor Labs, 2026-08-04 · 查閱 2026-09-23
  46. 研究文章Shai-Hulud "Hades" Wave Hits Six PyPI Bioinformatics Packages via Stolen Tokens · Endor Labs, 2026-06-08 · 查閱 2026-09-23
  47. 安全公告VU#534320 NPM supply chain compromise exposes challenges to securing the ecosystem from credential theft and self-propagation · CERT/CC, 2025-09-29 · 查閱 2026-09-23
  48. 研究文章A Massive Shai-Hulud Campaign Hits npm: +440 Packages Compromised, Over 2B Monthly Downloads · OX Security, 2026-08-04 · 查閱 2026-09-23
  49. 研究文章New Actors Deploy Shai-Hulud Clones: TeamPCP Copycats Are Here · OX Security, 2026-05-17 · 查閱 2026-09-23
  50. 研究文章Another Shai-hulud npm worm is spreading: here's what you need to know · ReversingLabs, 2025-12-09 · 查閱 2026-09-23
  51. 研究文章ctrl/tinycolor and 40+ NPM packages compromised · StepSecurity, 2025-09-15 · 查閱 2026-09-23
  52. 研究文章TeamPCP's Mini Shai-Hulud Is Back · StepSecurity, 2026-05-11 · 查閱 2026-09-23
  53. 研究文章Sha1-Hulud: The Second Coming – Zapier, ENS Domains, and Other Prominent NPM Packages Compromised · StepSecurity, 2025-11-23 · 查閱 2026-09-23
  54. 研究文章The Hades Campaign: Graph ML PyPI Packages Deploy Cross-Platform Memory Scrapers, AI Analyst Misdirection, and a Wiper Deterrent · StepSecurity, 2026-06-08 · 查閱 2026-09-23
  55. 研究文章keyv and cacheable npm Package Hijacked in Supply Chain Attack · Wiz, 2026-08-04 · 查閱 2026-09-23
  56. 研究文章Mini Shai-Hulud Strikes Again: TanStack + more npm Packages Compromised · Wiz, 2026-05-11 · 查閱 2026-09-23
  57. 研究文章Shai-Hulud 2.0 Supply Chain Attack · Wiz, 2025-11-24 · 查閱 2026-09-23
  58. 研究文章Shai-Hulud npm supply chain attack · Wiz, 2025-09-16 · 查閱 2026-09-23

如何引用本頁

本文採 CC BY 4.0,轉載請保留署名與連結。

PlainCVE 團隊(2026)。《Shai-Hulud:npm 與 PyPI 的自我擴散蠕蟲攻擊活動》。PlainCVE。https://plaincve.date/campaigns/shai-hulud(查閱日期:YYYY-MM-DD)
BibTeX
@misc{shaihulud2026,
  title  = {Shai-Hulud:npm 與 PyPI 的自我擴散蠕蟲攻擊活動},
  author = {PlainCVE 團隊},
  year   = {2026},
  howpublished = {PlainCVE},
  url    = {https://plaincve.date/campaigns/shai-hulud},
  note   = {更新於 2026-09-24}
}