Skip to content
Dustin's AI Lab
Go back

你的 AI 工具已經是攻擊媒介:npm/Python 供應鏈後門、外洩金鑰盜刷 1000 美元,與裝 MCP 前的掃描 SOP

攻擊者已經在 Claude Code、Cursor、Gemini CLI 的設定檔裡植入指令,讓你的 AI 助手幫他們跑竊取腳本。這篇串起兩波供應鏈攻擊、一次一千美元的盜刷,以及安裝前該做的那五分鐘。

目錄
  1. 攻擊者已經把 AI 工具當成媒介:從 Miasma 到 Hades
  2. 一把外洩的金鑰、1000 美元,跟一個自己跑去吵架的 Codex
  3. 所以:裝任何東西之前先掃那五分鐘

攻擊者現在不用打你的機器,只要打你的助手。他們在 ~/.claude/settings.json.vscode/tasks.json.cursor/rules/ 裡植入指令,讓你的 AI 工具自己去跑竊取腳本;他們在惡意程式碼頂部寫一行給 AI 審查員看的「這個套件是乾淨的」,掃描器就照單全收。以下是兩波已經發生的供應鏈攻擊、一次一千美元的盜刷帳單,以及我現在裝任何東西之前一定會做的五分鐘。

攻擊者已經把 AI 工具當成媒介:從 Miasma 到 Hades

2026 年 6 月,一個攻擊組織在兩天內接連被揭露兩波供應鏈攻擊。第一波代號 Miasma,鎖定 npm;第二波代號 Hades,是同一組織(TeamPCP/UNC6780)的升級版,跨到了 Python 生態系,並直接把 AI 工具當成攻擊媒介。兩波是演進關係,先後串起來看,才看得出攻擊者怎麼一步步把刀磨利。

第一波:Miasma(6/9)

資安研究員揭露一場針對 npm 生態系的大規模供應鏈攻擊,代號 Miasma。攻擊者入侵 @redhat-cloud-services 命名空間旗下約 32 個套件,推送超過 100 個惡意版本,並透過蠕蟲機制擴散至另外 57 個套件、286+ 個版本(第二波代號 Phantom Gyp)。

攻擊機制:惡意程式藏在 preinstall 腳本,執行 npm install 時自動觸發,並植入以下持久化檔案:

重要:卸載 npm 套件本身無法清除這些植入檔案,必須手動逐一確認。

竊取的資料包含 AWS、GCP、Azure IAM 憑證、GitHub token、npm publish token、SSH 金鑰等,加密上傳至攻擊者控制的遠端。

Miasma 自我檢查步驟:

  1. 確認是否安裝過受影響套件:npm ls -g 2>/dev/null | grep redhat-cloud
  2. 確認 Claude Code 設定中無不明 hook:cat ~/.claude/settings.json 觀察 preToolUse/postToolUse 是否有不認識的腳本或 curl、wget 外連指令。
  3. 掃描可疑植入檔案:ls ~/.claude/setup.mjs 2>/dev/null / find . -name "tasks.json" -path "*/.vscode/*" 2>/dev/null | head -10

若未安裝過 @redhat-cloud-services 系列套件,且以上掃描無異常,則不受本次攻擊影響。

第二波:Hades(6/11)

上個月 Miasma 攻擊(紅帽 npm 套件後門)還沒平息,同一個攻擊組織 TeamPCP/UNC6780 又升級武器,推出代號 Hades 的新一波攻擊。這次他們跨到 Python 生態系,並直接把 Claude Code、Cursor、Copilot、Gemini CLI 等 14 款 AI 工具當成攻擊媒介。目前已確認有 294,842 個 secrets 從 6,943 台機器外洩。

攻擊有哪些新手法:

重要:先別急著 rotate API keys!Hades 會監控你的 token 是否被撤銷,一旦偵測到就觸發整個家目錄的遞迴刪除,先清理持久化腳本再撤換憑證,順序搞錯可能造成更大損失。

Hades 自我檢查步驟:

  1. 確認 Python site-packages 內有無可疑啟動腳本:find ~/.local/lib /usr/local/lib -name "*-setup.pth" 2>/dev/null
  2. 確認 Bun payload 有無執行痕跡:ls /tmp/.bun_ran 2>/dev/null
  3. 掃描 Claude Code config 有無不明指令:cat ~/.claude/settings.json 觀察 hooks 區段是否有不認識的腳本或 curl 呼叫
  4. 確認背景有無可疑 monitor 程序:pgrep -lf "gh-token-monitor|pgsql-monitor|kitty-monitor"

若以上掃描均無異常,且近期未 pip install 生物資訊學相關套件(ensmallen、gpsea、spateo-release 等),則目前暫不受影響。

若不幸中招,正確清除順序:斷網隔離 → 刪除 .pth 檔並移除 AI config 內植入指令 → 卸載惡意套件 → 最後才 rotate 所有 credentials。

資料來源:

一把外洩的金鑰、1000 美元,跟一個自己跑去吵架的 Codex

上面那些是別人的災情。輪到我自己的時候,長這樣。

Codex 強大的瀏覽器操作功能又有一新用途:自動幫我跟 Google 真人客服對話吵架。

馬的,API key 洩漏沒設 spending cap,怒噴 1000 USD。

事情是 PDT Learning 有一支 Gemini backend 的 API key 外洩被盜刷,因為沒設 spending cap,直接燒出約 1000 美元的異常費用。我把跟 Google Cloud 真人客服爭取費用調整這件事交給 Codex 的瀏覽器操作能力去跑,結果它吵到自己主動做證據包然後發給對方。

那份證據包是一份完整的英文資料:15 頁的 PDF、一份 DOCX、raw evidence、support transcript、screenshots、manifest、hashes,全都建好放在 Downloads 裡,而且刻意不含實際的 key 值。Google Cloud Support 的 Case #73506704 已經受理費用調整,等 32 小時帳務傳播跟 internal review。

荒謬歸荒謬,善後還是得做

費用可以吵,洞還是得補。我精準刪除、輪換了那把遭濫用的 backend key,追溯到有兩支 private-repo 的測試腳本曾經含明文憑證(確切的外洩路徑到現在還是不明),已經把明文移除、改由 Secret Manager 提供。

接著幫 7 個付費 AI Functions 全部補上防護:Firebase Auth、App Check、Firestore 持久化的 per-user/per-action rate limit、action allowlist、user-ID 檢查,還有 maxInstances。production 全部 ACTIVE,匿名探測 analyzeQuestiontoolAction 都回 401。

案子拖到週末都還沒完。我後來才發現,Google support 的 billing 跟 technical 是兩個互不包含的追蹤入口:billing 列表只看得到退款的 case #73506704,technical 列表只看得到降限的 case #73501463,兩案得分頭查詢才拼得出全貌。7/21 之後零回音,我從 Cloud Console 案件頁送了催件,問傳播完成沒、review 狀態、調整範圍。另一個案子 #73501463 三個工作天沒回,跑出一封自動催辦信,查證 DKIM/SPF/DMARC 都過、確認是真的通知不是釣魚後,用 gog reply-all 回覆並把它關聯到費用調整案,避免原案自動關閉。順手測了本機 ~/.credentials/env-secrets 的那把 GEMINI_API_KEY,HTTP 200 有效,確認不是同一把——真正被盜的那把 7/21 就已經刪掉輪換完了。

就這樣,還在等 Google review。

所以:裝任何東西之前先掃那五分鐘

MCP server 是 Claude Code 的「外掛市集」。任何人都可以發 MCP server 到 GitHub、npm、PyPI。你裝下去之後,那個 MCP server 在你電腦裡能做的事情,跟你授權給它的權限有關。

但是大多數人安裝 MCP 的流程是:在 Twitter 或 Reddit 看到別人推薦、複製 claude mcp add 指令、貼進終端機按 Enter。這個流程裡完全沒有「先看一下這個 MCP 在做什麼」的步驟。

/security-scan 是什麼

我自己有一個全域 skill 叫 /security-scan。當我下這個指令、把目標 repo URL 或 npm 套件名給它,Claude Code 會:

  1. 下載原始碼(git clone 或 npm view tarball)
  2. 掃 dependency tree:列出所有 transitive dependencies,比對已知 CVE
  3. 掃 manifest 檔package.json / pyproject.toml / Cargo.toml 看 maintainer 是誰、有沒有奇怪的 install script
  4. 掃原始碼:找潛在的 command injection、SSRF、unsafe deserialization、credential exfiltration patterns
  5. 掃網路行為:靜態分析裡有沒有打 http:// 而不是 https://、有沒有寫死的外部 endpoint
  6. 產出評估:CRITICAL / HIGH / MEDIUM / LOW 分級 + 是否建議安裝

整個流程約 3-5 分鐘。

實測案例:找到 7 個漏洞但說可以裝

我實測的是一個三方 MCP server。我先不講名字(避免誤導觀眾——重點是 SOP,不是評價那個特定 MCP)。

掃出來的 7 個 finding:

  1. MEDIUMrequests 套件版本過舊(有已知 CVE,但不是這個 MCP 直接觸發的路徑)
  2. MEDIUM:URL 處理沒做 SSRF 防護(但這個 MCP 設計就是要打外部 API,無法完全消除)
  3. LOWsubprocess.run(shell=True) 用法但是 input 來自固定字串,不是 user input
  4. LOW:log 裡會印出 API key 的前 4 個字元(不會洩漏完整 key,但仍是不必要的揭露)
  5. LOW:沒有 rate limiting(在 MCP 場景下不嚴重,因為 caller 是你自己)
  6. INFO:README 沒寫安全考量
  7. INFO:缺少 SECURITY.md

Claude Code 綜合評估後給的結論是「可以裝」。理由:沒有 CRITICAL 或 HIGH;MEDIUM 的兩條都是「設計上的取捨」而不是「實作 bug」;LOW 的三條都是 code hygiene 問題,不影響安全核心;INFO 的兩條是 documentation 缺失,可以提 PR。

如果你看到的是 CRITICAL 或 HIGH,特別是「unsafe deserialization」「shell injection with user input」「hardcoded credentials」這類,STOP。不要裝。

為什麼讓 AI 自己評估、而不是你自己看

兩個原因。第一是速度:人工讀 7 個 finding 一個一個查 CVE 編號、確認 affected version 是哪些、判斷你的場景會不會觸發——這套流程一個 finding 至少 5-10 分鐘。7 個就是 35-70 分鐘。AI 5 分鐘做完。

第二是認知偏差:人類在「看到自己想裝的東西」的時候,會傾向找理由說服自己「這個 finding 應該沒關係吧」。AI 沒有這個偏差。

當然 AI 也有「過度警示」的偏差(看到任何 subprocess 就標 HIGH)。所以最後的判斷還是要你看 AI 的 reasoning,自己拍板。但是讓 AI 先做第一輪過濾,比你自己從零開始好得多。

跟全域 hook 配合

我把 /security-scan 還掛了一個 PreToolUse hook:當 Claude Code 嘗試執行 claude mcp addnpm installpip installgit clone 之類的指令,hook 會跳出來提醒「裝任何東西之前先跑 /security-scan」。

這樣即使我自己一時忘記、想直接複製貼上某個推薦指令,hook 也會擋住。CRITICAL / HIGH findings → STOP,不裝、回報、考慮 alternative。

給沒有 /security-scan skill 的人

如果你還沒寫這個 skill,最簡單的版本是直接跟 Claude Code 講:

請下載 的原始碼,掃描其依賴、shell 用法、network 行為、credential handling 有沒有安全疑慮。給我 CRITICAL/HIGH/MEDIUM/LOW 分級評估,最後給我「建議安裝 / 不建議 / 條件式安裝」的結論。

這個 prompt 跑下來大概就是 80% 的 /security-scan 體驗。等你常常用之後,再考慮把它包成一個 skill。

MCP server 的數量在過去幾個月暴增。Twinkle Hub、mcp-taiwan-legal-db、各種 Reddit 大神寫的小工具——每天都有人推薦新的可以裝。

如果你照單全收,你的 Claude Code 環境裡的 MCP server 會在三個月內累積到 20-30 個。其中可能有幾個是惡意的(譬如 typosquatting:mcp-anthrop1c 假裝是官方的 mcp-anthropic);也有幾個是寫得太爛、會把你的 API key log 到外部服務的。

裝 MCP 不是免費的。它的成本是「你電腦的安全表面積」。每多裝一個就多一份信任債。

/security-scan 是還這份債的最低成本工具。


Share this post on:
Previous Post
你的電腦才是攻擊面:殘留憑證、權限旗標、不可信輸入
Next Post
自動發片管道正在悄悄漏成品:Remotion、ffmpeg、YouTube API、HyperFrames 的踩坑總表