AI Radar 趨勢判讀 #2 | 問題領域:agent 外掛供應鏈資料期間:2026-W35 ~ W36 | 一手證據:兩個公開目錄的完整快照2026-09-05
我在外掛目錄裡找東西,看到一個看起來正好能用的。
安裝方式是一行指令。複製、貼上、按 Enter,三秒鐘的事。
在按下去之前,我想到一個問題:這東西是誰寫的?
我不知道。目錄上就一個名字、一句話的說明。我沒讀過它的原始碼, 也不會讀——沒有人會為了裝一個外掛先去讀完幾千行程式碼, 就像你不會為了買一顆插座先去驗證它的內部線路。
而它裝上去之後,是跑在我的電腦上、用我的權限、看得到我的檔案。
所以真正的問題不是「這個外掛好不好用」,是:
在我按下 Enter 之前,有沒有人替我檢查過?
先講清楚「外掛目錄」是什麼
上一篇我講過一個比喻:如果 MCP(Model Context Protocol,模型情境協定) 是 AI 世界的 USB 規格,那外掛目錄(plugin marketplace)就是電器行。
USB 規格解決的是「插上去能不能通」。 電器行解決的是另一件事:這麼多插頭,我該買哪一個,以及賣我的人是誰。
Anthropic 開了兩間店:
- `claude-plugins-official` ——官方精選,廠商自己送審的
- `claude-plugins-community` ——社群開放,任何人都能投稿
兩間店都放在 GitHub 上,完全公開。這代表任何人都可以重跑我下面的每一個數字, 不需要相信我。這一點很重要,我最後會回來講。
我數到的東西
以下數字取自兩個 repo 的特定 commit(可以想成「某一個時間點的完整存檔」), 任何人取用同一個存檔都會得到同樣的結果:
官方目錄(`anthropics/claude-plugins-official` @ `85cce03`,2026-09-04)
項目 | 數字 |
|---|---|
外掛總數 | 291 |
具名作者 | 129 個不同的作者 |
最大宗類別 | 開發工具 120、生產力 52、資料庫 38、監控 20、資安 18 |
送審的是誰?Anthropic 自己 38 個、Google 14 個、SAP 9 個、AWS 7 個, 其餘散在 Oracle、Atlassian、Shopify、Grafana、Carta 這些名字之間。
這不是業餘愛好者的市集,是廠商在搶著把自己接進 AI 的預設工具箱。
社群目錄(`anthropics/claude-plugins-community` @ `a727be1`,2026-08-24)
項目 | 數字 |
|---|---|
外掛總數 | 2,282 |
不同的 GitHub 帳號(上游來源) | 1,764 |
釘死在特定版本的比例 | 2,274 / 2,277 |
1,764 個不同的上游帳號,意思是:這件事有一千七百多組人馬各自在做。 不是幾家大廠灌量,是真的長出了一個生態。
到這裡為止,數字的形狀跟上一篇很像——爆量、來源分散、成長很快。 上一篇的結論是「沒有任何目錄在驗證」,我本來準備把同一句話再寫一次。
然後我打開了 `.github/` 資料夾
這是我這週最大的意外。這個目錄的防線比我預期的完整得多。
我在 repo 裡找到四套機制,全都可以直接讀原始碼。一個一個講, 每一個我都說明它擋的是什麼樣的具體攻擊。
一、版本釘死——擋「事後掉包」
目錄裡每一筆條目,記的不是「去 GitHub 抓某某專案」, 而是「抓某某專案的第 abc123 號版本」。2,277 筆裡有 2,274 筆是這樣寫的。
它擋的攻擊長這樣:某人先發一個乾淨的版本,等三個月、幾千人裝了、口碑好了, 再把內容偷偷換成有毒的。所有裝過的人在下次更新時中招。
釘死版本之後,上游怎麼改都流不到你這裡。 你今天裝到的,跟目錄當初審過的,是同一份東西。
用你熟的話講:這就像簽約時雙方各留一份存證影本。對方事後在自己那份上加註,跟你手上這份無關。
二、身分釘死——擋「帳號被接管」
這一項我完全沒料到,也是四項裡最精巧的。
檔案叫 `owner-baseline.json`,它記的不是帳號名稱,是帳號 id。
差別在哪?看這個故事:
有個開發者叫 alice,寫了一個很多人在用的外掛。兩年後她不玩了,把 GitHub 帳號刪掉。`alice` 這個名稱因此被釋出。 >攻擊者立刻註冊一個新帳號,也叫 `alice`。名字一模一樣、網址一模一樣——但那是另一個人。 >然後他在「alice 的專案」底下推一版有毒的更新。所有信任 alice 的人,全部中招。
這是供應鏈攻擊的經典手法。防守的關鍵在於:帳號名稱可以換人,帳號 id 不會。
所以系統一發現「這個名稱現在對應到不同的 id」,就知道這個帳號換人了, 把它底下所有條目標記為待複查。
三、抓「釘不住的那一塊」——這一項我評價最高
版本釘死聽起來很完整,但它有個漏洞。
如果一個外掛的啟動指令寫的是 `npx some-server@latest`, 那麼真正跑起來的程式碼,是開機當下才從套件庫抓的, 根本不在你釘死的那個版本裡。
比喻:你把菜單釘死了,一個字都不能改。但菜單上有一道菜叫「今日主廚推薦」——菜單沒變,端上來的東西每天不一樣。 >你釘住的是一張紙條,紙條寫著「去外面拿東西回來」。紙條沒變,拿回來的可以是任何東西。
目錄有一個靜態檢查專門抓這種寫法(`npx` / `bunx` / `uvx` / `pipx` 配上 `@latest` 或版本範圍),掃到就標記為「未釘死的自動執行」。
他們知道自己的釘子釘不到哪裡,然後去把那塊補起來。 一個防線願意標示自己的破口,比一個宣稱自己密不透風的防線可信得多。
四、帳號存活掃描 + 政策掃描
每個變動的條目會被跑一次政策掃描,輸出「會不會對外連網」 「會不會下載額外軟體」這些欄位;另有排程作業定期檢查上游帳號還在不在。
所以我判讀錯了嗎?一半
我原本準備寫「上一篇那個洞,在這一層也一樣」。那是錯的,我改掉了。
但把原始碼讀完之後,有兩件事讓我沒辦法把結論寫成「這裡很安全」。
第一,這些機制預設不擋
官方文件寫得很直白:政策掃描是 `Non-blocking by default`—— 掃出問題只會變成 GitHub 上的黃色警告和一張摘要表格, 要另外設定 `fail-on-findings: true` 才會真的讓流程失敗。
浮動啟動器的檢查也一樣:預設只標註,嚴重程度「per-consumer」—— 由使用它的人自己決定要不要當一回事。
比喻:一棟大樓裝了門禁、監視器、保全巡邏,樣樣齊全。但大門一直開著,保全看到陌生人進來只會說一句「登記一下喔」,然後放行。 >器材清單很漂亮。但決定這棟樓安不安全的,是大門開著還是關著。
機制清單不是安全水準,預設值才是。
第二,有 49 個外掛的上游現在是壞的
repo 裡有一份 `freeze-shas.txt`,記錄的是 「上游最新版跑不過驗證,所以刻意凍在舊版本、不讓它更新」的條目。 2026-06-13 的快照,49 筆。
凍住是對的處置——把壞掉的版本推給使用者更糟。但這代表:
目錄裡有 49 個外掛,你裝到的是一份上游已經走壞的舊快照, 而它在列表上看起來,跟其他 2,233 個沒有任何差別。
判讀
供應鏈安全不是做不到,是有沒有人負責。
技術上,這四套機制沒有一項是新發明——版本鎖定、帳號 id 綁定、 靜態掃描、存活檢查,每一項在傳統軟體供應鏈都是十幾年的老東西。
上一篇那 10.8 萬個 MCP 服務缺的不是技術,是一個對整份清單負責的人。
外掛目錄有那個人,所以有這些防線。MCP registry 沒有,所以什麼都沒有。
同一個組織、同一段時間、同一批工程師——差別只在有沒有 owner。
這件事在別的地方也一樣:兩棟一模一樣的公寓,一棟有管委會、一棟沒有,三年後的狀態會差很遠。差的不是建材,是有沒有人把它當自己的事。
這可能錯在哪
三個地方我沒把握:
- 我讀的是設定,不是行為。 我確認了機制存在、確認了預設值, 但我沒有觀察到一次真實的攔截。 程式碼寫著會掃,跟實際掃出東西並擋下來, 是兩件事。
- 兩個快照不同天。 官方是 09-04、社群是 08-24,差 11 天。 數量比較(291 對 2,282)不受影響,但成長速度我沒有算,因為只有一個時間點。
- 那 49 筆是 2026-06-13 的快照。 三個月前的數字。 有些上游可能已經修好,實際數字可能更低——也可能更高。
回到我按下的那個安裝鍵
一開始那個問題是:在我按下 Enter 之前,有沒有人替我檢查過?
我把電器行的後台整個翻了一遍,答案是:
有人在檢查,而且檢查得比我想的細。 但他把檢查結果貼在牆上,沒有把門鎖上。
對我來說這反而可以接受——因為我本來就不打算讓別人替我做決定。 四道濾網存在的理由就是這個:目錄的工作是把資訊攤開,篩選是我自己的事。
真正讓我改觀的是另一件事。
我能寫出上面每一個數字,是因為這兩個目錄整個放在 GitHub 上, 連掃描規則和那份 49 筆的凍結清單都是公開的。 我不需要相信任何人的說法——我把它抓下來,自己數。
一個願意讓外人數自己家裡有幾個壞掉條目的目錄, 比一個宣稱自己很安全的目錄可信得多。
對你的意義
如果你要裝一個外掛,在按下去之前問三個問題——這三個問題目錄不會替你問:
- 它的啟動指令裡有 `@latest` 嗎? 有的話你釘不住它——你釘的是那張紙條,不是拿回來的東西。 目錄會標記,但預設不擋。
- 上游帳號還活著嗎? 看最後一次更新是什麼時候。凍結名單上那 49 個,從列表外觀完全看不出來。
- 它要連外網、或下載額外軟體嗎? 掃描結果就有這兩個欄位,去看。
還有一個更根本的,也是最容易被跳過的:
你裝它,是因為你有那個痛點,還是因為它看起來很厲害?
上個月我跑完四道濾網的七個工具裡,有一個四道全過,最後還是沒採用—— 因為 ProfitVision LAB 根本沒有它要解的那個問題。
工具好不好,跟你需不需要,是兩件不同的事。
來源
兩份都是公開 repo,commit 本身就是引用位置。
- `anthropics/claude-plugins-official` @ `85cce03`(2026-09-04)
- `anthropics/claude-plugins-community` @ `a727be1`(2026-08-24) ——見 `.github/actions/scan-plugins/`、`.github/owner-baseline.json`、`.github/freeze-shas.txt`
本篇由 ProfitVision LAB 的 AI Radar 與開發團隊共同協作產出。 候選池、四道濾網判定與完整證據鏈公開於 ai-radar registry。
