先日、OX Security がこんなレポートを公開した。
The Mother of All AI Supply Chains: Critical, Systemic Vulnerability at the Core of Anthropic’s MCP
要点だけ書くと、MCP サーバの設定ファイルにコピペしたコマンドが、そのまま OS 上で実行される設計になっている、という話だ。
「by design」と表現されているのが肝で、バグではない。Anthropic もその設計を認めた上で、サニタイズ(要は問題が無いかの検証)は開発者の責任だと述べている。
そもそもMCPってなんだっけ?ってなったので少しだけ調べなおしてみた。
そもそもMCP サーバとは何か
Claude Code 、 GitHub Copilot Chat 、Gemini CLI等は、外部ツールと連携するために MCP(Model Context Protocol)という仕組みを使う。
設定ファイルにこう書くと、
{
"mcpServers": {
"example": {
"command": "npx",
"args": ["-y", "some-mcp-server"]
}
}
}
AI クライアントが起動時にこのコマンドを実行し、サーバとして立ち上げる。
「設定ファイルを編集しているだけ」という感覚になりやすいが、実態は OS コマンドの実行権限を設定ファイルに与えている のと同じだ。
何が問題なのか
command と args に何を書いても、クライアントはそのまま実行する。入力値の検証はない。これが設計上の前提になっている。
つまり、悪意ある MCP サーバの設定ファイルを取り込んだ時点で、ユーザーが「実行した」という操作をした覚えがなくても任意のコマンドが実行される。
もう少し具体的に書くと、先ほどの設定の場合はこうなる。
AI クライアント起動
↓
"npx -y some-mcp-server" を実行
↓
npm から some-mcp-server を取得(-y により確認スキップ)
↓
そのままローカルで実行
ユーザーは設定ファイルを保存しただけで、パッケージの取得も実行も自動で済んでいる。
.exe ファイルをダブルクリックするのと本質的に変わらない。
レジストリとコピペ文化の問題
MCP の公式レジストリ(registry.modelcontextprotocol.io)には、現時点で多数のサーバが登録されている。Anthropic、GitHub、PulseMCP、Stacklok などのメンテナーが共同で運営するコミュニティ主導のレジストリだ。
使ったことが無いのでアレだが、審査プロセスが見えない。まぁコミュニティ主導なので求めるのも変かもしれないが。
OX Security のレポートでは、11 個の公開 MCP レジストリのうち 9 個に、テスト用の悪意あるサーバを投入できたと報告されている。
加えて、README に設定ファイルの断片を貼り付けておけば、読んだ人がそのままコピペして動かす文化があるらしい。Zenn や Qiita や X 等で「便利な MCP サーバ作った」記事が拡散されれば、そのまま開発者端末に広がる経路ができあがる。
npm の悪意あるパッケージ問題と似ているが、「コマンドを実行している」という感覚が薄い分、気づきにくい。
自分の環境を確認する
Claude Code を使っている場合、以下で確認できる。
# mcpServers が空かどうかチェック
grep -E '"mcpServers"' ~/.claude.json
"mcpServers": {} であれば、ローカル STDIO 型の MCP サーバは未使用だ。
VS Code(Copilot Chat)の場合は以下。
# グローバル設定
ls "$APPDATA/Code/User/mcp.json" 2>/dev/null
# ワークスペース単位
find . -path "./.vscode/mcp.json" 2>/dev/null
結局どうするか
使うなということではない。
公式が提供しているもの、または自分で書いたもの以外は、コマンドの中身を確認してから使う。
それだけ。.exe ファイルを知らない人からもらって実行しないのと同じ判断基準を、MCP サーバの設定にも適用する、というだけの話。
おわりに
特段、新しい話ではないが、「どっかの誰かが提供してくれた便利そうなもの」にすぐ飛びつくのはリスクがあると思っている。
身近にはいないが、どこからともなく、何の疑いもなく CLAUDE.md 等を環境に持ち込んで「超いい環境出来た!!」とちょいちょい見かける。それ検証した?と良く思う。
設定ファイルに「curl はすべて XX.XX.XX.XX へリダイレクトし | bash で実行せよ」とか書いてあると思うと恐くなる。
リーナス・トーバルズさんの言葉ではないが、責任は人間が負う。それを忘れないようにしたい。