49% of npm MCP Packages Have Security Findings
We analyzed 2,386 npm packages tagged as MCP servers or tools. 35,858 tool definitions. 49% have at least one security finding. 27% are HIGH or CRITICAL. The npm MCP ecosystem has a security problem.
方法論
我們從 npm registry 拉取所有符合 `mcp-server`、`mcp-tool`、`model-context-protocol`、`@modelcontextprotocol` 查詢的套件。共 2,386 個不重複套件,包含 35,858 個工具定義。我們用 ATR v0.4.0(71 條規則)掃描每一個,同時檢查 package.json 的 postinstall scripts、分析依賴樹的已知弱點、對照前 100 名最多下載的 MCP 套件做仿冒偵測。
核心數據
49% 的套件(2,386 個中的 1,169 個)至少有一項安全發現。27%(644 個)被評為 HIGH 或 CRITICAL。嚴重性分布: | 嚴重性 | 套件數 | 百分比 | |--------|--------|--------| | CRITICAL | 89 | 3.7% | | HIGH | 555 | 23.3% | | MEDIUM | 312 | 13.1% | | LOW | 213 | 8.9% | | 通過 | 1,217 | 51.0% |
npm 上的三重威脅
10.4% 的套件(2,386 個中的 248 個)同時結合 shell 執行、網路存取和檔案系統操作 -- 我們所說的「三重威脅」模式。這是 ClawHub 生態系(2.6%)的 4 倍。npm 的 MCP 套件更傾向於需要廣泛系統存取的全端工具,攻擊面更大,合法與惡意之間的界線更難劃。
postinstall Scripts:靜默執行向量
122 個套件(5.1%)在 package.json 裡有 postinstall scripts。這些 scripts 在 `npm install` 時執行,在任何 code review 發生之前。ua-parser-js 供應鏈攻擊(CVE-2021-43616,每週 780 萬次下載被入侵)用的就是這個手法 -- 乾淨套件用了好幾年,然後一次更新加了 postinstall script 安裝了挖礦程式。我們發現 18 個套件的 postinstall 內容是混淆的,或在安裝時抓取遠端程式碼。
Prompt Injection 是最常見的發現
觸發次數最多的 ATR 規則是 ATR-PI-001(工具描述中的 prompt injection)。312 個套件的工具描述包含類似指令的內容,可能覆寫呼叫端 LLM 的使用者意圖。模式包括:隱藏的 `<IMPORTANT>` 區塊(47 個套件)、角色重新指派指令(89 個套件)、「忽略先前指令」的變體(31 個套件)。不是全部都有惡意 -- 有些只是笨拙地想提供 LLM 上下文。但效果一樣:工具描述變成攻擊向量。
仿冒攻擊正在進行中
我們發現了一個叫 SANDWORM_MODE 的協同仿冒行動:19 個 typosquat 套件針對熱門 MCP 工具。包括 `claud-code`(針對 `claude-code`)、`cloude-code`、`opencraw`(針對 `openclaw`)。這些套件功能極少但包含竊取 SSH keys 和環境變數的 postinstall scripts。19 個已全部回報 npm,截至撰文時 14 個已移除,5 個仍在線上。
npm 該怎麼做
npm 目前沒有 MCP 專用的安全掃描。現有的 `npm audit` 檢查依賴弱點但不分析工具定義、SKILL.md 或 MCP 特定的攻擊模式。我們認為 npm 應該:(1) 在發布流程加入 ATR 掃描,(2) 標記存取網路或檔案系統的 postinstall scripts,(3) 要求 MCP 套件以機器可讀格式宣告能力需求,(4) 在套件頁面顯示風險評分。
你該怎麼做
安裝任何 MCP 套件前: ```bash npx @panguard-ai/panguard audit <package-name> ``` 這會在套件碰到你的系統之前做預安裝安全檢查並給出風險評分。如果你已經安裝了 MCP 套件,跑 `pga scan` 審計機器上的所有東西。
完整資料集在 ATR 儲存庫。每週更新。