はじめに
こんにちは。サービス開発部の木村です。
最近は様々な企業やサービスから、開発作業にも役立つようなMCP Serverが日々リリースされています。
MCP Serverを有効活用することで開発効率の向上が見込めますが、MCP Sevrerに関連した脆弱性の報告も定期的に見かけるので、MCP Serverユーザーがどのようなことに注意すべきなのかを改めて調べました。
最近報告されたMCP Server関連の脆弱性
参考までに一部抜粋ですが、次のように人気のあるツールやOSSでも脆弱性が報告されており、現在は既に対策がされています。
- Cursorで悪意のあるMCP Serverにインジェクションされてしまう脆弱性 (CVE-2025-54135, CVE-2025-54136)
- AnthropicのMCP Inspectorでリモートから任意のコードを実行できてしまう脆弱性 (CVE-2025-49596)
- aws-mcp-serverのコマンドインジェクションされてしまう脆弱性 (CVE-2025-5277)
- mcp-remoteでリモートから任意のコードを実行できてしまう脆弱性 (CVE-2025-6514)
MCP Serverは過渡期なこともあり、従来とは異なるアプローチの攻撃リスクも追加で考慮する必要があります。
MCP Server特有の脆弱性の種類
比較的MCP Server特有だと思われる脆弱性の種類もいくつかあるようなので紹介します。
MCPoison
悪意のあるMCP Serverを通じて、MCP Serverの設定ファイル(.vscode/mcp.jsonや.cursor/rules.mcpなど)に悪意のあるコマンドを仕込む脆弱性です。
チームやプロジェクトの運用ルールにもよりますがgitでignoreされている場合も多いと思うので、意図せず更新されていること自体にが開発者が気付けないケースもあると考えられます。
最初字面を見た時は MCP Poison の誤字かと思いましたが、MCPoisonと呼ばれているみたいです。
MCP Rug Pulls
MCP Server利用時に初回の承認をさせた後に、MCP Server側で悪意のある実装を含めたアップデートを行うことでAI Agentの認証を突破する脆弱性です。
元々悪意を持って作られていないMCP Serverが乗っ取られた場合も、この脆弱性を利用して悪意のあるコマンドをローカルマシンで実行されてしまう可能性があります。
現状は利用者がMCP Server側のアップデートを都度検知するのが難しいケースが多いと思うので、実は被害に会っていても気付けないケースも多そうです。
Tool Poisoning
MCP ServerのAI Agent向けのdescriptionに悪意のある命令を設定することで、AI Agentで悪意のあるコマンドを実行させる脆弱性です。
MCP Serverの一般的な利用方法に沿ってAI Agentに設定するだけではMCP Serverのdescriptionを見る機会が無いのと、導入時は問題なくてもMCP Rug Pullsと合わせていつの間にかdescriptionが変わっているというシチュエーションも考えられるので、AI Agent側で対策がされていないと対応や検知が難しいと思っています。
MCP Serverの脆弱性の検知は難しい
脆弱性の種類を調べる中で個人的に共通して感じたのが「検知が難しい」という点です。
検知が難しくなっている要因としては、次のような要因があると考えています。
MCP Serverの利用しているバージョンを意識しにくい
MCP Serverの利用時は下記のサンプルコードのように 、特定のエンドポイントにリクエストする"type": "url" 、またはnpxやuvxなどのCLIツールを使用した"type": "stdio"を使うケースが多いと思います。
{ "mcpServers": { "playwright": { "type": "stdio", "command": "npx", "args": ["@playwright/mcp@latest"] }, "context7": { "type": "url", "url": "https://mcp.context7.com/mcp", "headers": { "CONTEXT7_API_KEY": "YOUR_API_KEY" } } } }
"type": "url"でMCP ServerのURLにリクエストする方式では、バージョンでエンドポイントそのものが変わらない限りは、そもそも利用者がどのバージョンを使っているのかが設定ファイルからはわかりません。そもそもバージョンの概念はないかもしれません。そのため、利用者がMCP Serverのバージョンを固定したいと思ってもできません。
"type": "stdio"でnpxなどを使用する方法では、現状MCP Server公式の手順で@latestを使用して常に最新バージョンを参照するように記載されていることが一般的で、利用者目線では具体的にどのバージョンを利用しているのか認識しにくく、MCP Serverのバージョンアップをしたつもりがなくてもいつのまにか悪意のある実装が含まれたバージョンがインストールされてしまっている可能性もあります。ただし、最新のパッチを常に反映できる恩恵もあるため、バージョンを調べて固定した方がいいとは一概には言えません。
OSSではないMCP Serverも多い
"type": "url" と"type": "stdio" 問わず、OSSとして公開されていないものも多く存在するので、MCP Server選定時に具体的な実装を確認したくてもできないケースも多いです。
OSSなら安全というわけではありませんが、フィッシングのような、いかにも公式に見えるエンドポイントの非公式ツールの出現も考えられなくは無いので、ツール選定において実際の実装を見ることは安全性の根拠の一つになり得ると思っています。
できる限り安全にMCP Serverを使うために
信頼できる提供元のMCP Serverを使う
MCP Sevrerに限った話ではないですが、大前提として信頼できる提供元であるかは大事です。
また、最近多く発生しているnpm packageの乗っ取りリスク等も存在するため、信頼できる提供元なら絶対に安全とは言い切れませんが、非公式ツールに比べたらリスクは下がると思います。
Dev Containerなどのコンテナ上で開発する
これはVSCodeやClaude Codeなどの開発用途のAI Agent機能に限定されますが、悪意のあるコマンドを実行されてしまった時の被害を制限するために、Dev Container等を使用してコンテナ上でMCP Serverを利用すると良さそうです。
これまでフロントエンド開発のプロジェクトをコンテナ上で開発するのはあまり一般的では無いと思いますが、セキュリティを高めるための手段としてDev Containerを利用するのは有効だと考えています。
GameWithではいくつかのリポジトリでDev Containerの導入を以前から進めており、過去の導入に関しては記事も書いています。
MCP Serverの脆弱性スキャンツール
こちらは詳細な検証がまだ出来ていないので今回は深く触れませんが、MCP Serverの脆弱性スキャンを行うツールがいくつか公開されています。
中でも比較的注目されていそうなのが mcp-scan で、提供元のInvariant Labsは現在脆弱性管理ツールであるSnykの傘下にいるので提供元としてもそれなりに信頼度は高いと思います。
mcp-scan は、AI Agentの設定ファイルベースでMCP Serverの脆弱性をスキャンしたり、AI AgentとMCP Serverの通信をプロキシして監視やフィルターをするなど、ただスキャンするだけでなくMCP Serverを継続的かつ安全に使うための機能を提供しているので、個人的にも試してみようと思っています。
さいごに
今回MCP Serverの脆弱性調べて、脆弱性の検知が難しいからこそ改めて対策をしっかりしていこうと思うきっかけになりました。
GameWithではエンジニアを絶賛募集中です!
サーバーエンジニアやフロントエンジニアの方、AIに興味がある方もお気軽にカジュアル面談をお申し込みください!