Zenn
🔌

MCPサーバーを利用する前に理解しておくべきセキュリティリスク

に公開
53

はじめに

最近MCPサーバーの盛り上がりを感じており、実際に様々なMCPサーバーが登場しています。
個人開発者が作成したMCPサーバーも増えてきました。

しかし、MCPサーバーは便利である一方で、中には強い権限や機密情報を扱うものもあり、セキュリティリスクが伴います。

この記事では、MCPサーバーのセキュリティリスクと、具体的な攻撃手法についてご紹介します。

MCPとは

まずは簡単にMCPについての解説です。

MCP(Model Context Protocol)は、昨年2024年11月にAnthropicによってオープンソースとして発表された、AIアプリケーション(Cursor, Cline等)が外部サービスやデータとやり取りするための標準規格のことです。

こちらの投稿の図がイメージしやすいかと思いますが、MCPはAIアプリケーションのための「USB-Cポート」のような役割を果たしています。

https://x.com/norahsakal/status/1898183864570593663

このように、MCPはアプリケーションがLLMにコンテキストを提供する方法を標準化しています。

なぜMCPサーバーがセキュリティリスクになり得るのか

MCPサーバーは誰でも作成でき、GitHub等で公開する事ができます。
そのため、悪意のあるコードを仕込んだMPCサーバーを開発することが可能です。

例えばローカルファイルの読み書きができるようなMCPサーバーを使用した場合、機密情報が入ったファイルの読み込みを許可してしまい、そこから情報漏洩に繋がるケースが考えられます。
また、外部リソースを扱うMCPサーバーの場合は、外部リソースにアクセスするために設定した認証情報やAPIキーを盗まれ、不正利用に繋がるというケースも考えられるでしょう。

このように、悪意のあるMCPサーバーを使用してしまうと個人情報や機密情報が漏洩する危険性があるため、リスクを理解した上でMCPを利用することが重要です。

MCPサーバーの主なセキュリティリスクの例

1. ツール汚染攻撃(Tool Poisoning Attacks)

ツール汚染攻撃とは、MCPツールの説明文に悪意のあるコードを埋め込む攻撃です。


出典: https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks

攻撃シナリオ

  • 単純な加算を行う「add」ツールに見せかけて、ユーザーの~/.cursor/mcp.json設定ファイルや~/.ssh/id_rsaなどのSSH鍵を読み取り、攻撃者に送信するような指示を埋め込む


出典: https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks

  • ユーザーには単なる「add」ツールとして表示されるが、AIモデルにだけ隠された指示が見えている
  • ユーザーはその危険性に気づかないまま実行してしまい、結果としてユーザーが知らない間に機密情報が漏洩

参考ソース

https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks

2. ラグプル攻撃(MCP Rug Pulls)

ラグプル攻撃は、ユーザーがMCPツールを承認した後に悪意のあるサーバーがツールの説明文を変更して有害なコードを追加する攻撃のことです。
つまり、偽のアップデート(Fake Update)を行うことで、ユーザーが承認したツールを悪用する攻撃です。

上記の1で述べたツール汚染攻撃と似ていますが、ラグプル攻撃はユーザーがツールを承認した後に行われる点が異なります。

攻撃シナリオ

  • ユーザーがツールを承認した後、悪意のあるサーバーがツールの説明を変更して有害なコードを追加
  • 例えば単純な計算ツールとして承認されたものが後で更新され、クレジットカード番号などの情報を盗むように変更される

参考ソース

https://medium.com/data-science-in-your-pocket/mcp-servers-are-not-safe-bfbc2bb7aef8

3. コマンドインジェクション脆弱性

Equixlyの調査によると、テストされたMCPサーバー実装の43%にコマンドインジェクションの欠陥が含まれていました。

攻撃シナリオ

  • 実際のMCPサーバー実装コードにコマンドインジェクション脆弱性が含まれていた
  • 攻撃者はnotification_info辞書(dictionary)にシェルのメタキャラクタを含む値を作成し、リモートコード実行(RCE)ができた


出典: https://equixly.com/blog/2025/03/29/mcp-server-new-security-nightmare/

参考ソース

https://equixly.com/blog/2025/03/29/mcp-server-new-security-nightmare/

4. シャドーイング攻撃(Shadowing Tool Descriptions)

シャドーイング攻撃とは、悪意のあるMCPサーバーが信頼できるMCPサーバーのツール説明を上書きすることで、1で述べたようなツール汚染攻撃を実行する攻撃のことです。


出典: https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks

攻撃シナリオ

  • 信頼できるサーバーと悪意のあるサーバーの両方に接続する
  • 悪意のあるサーバーが提供する偽のツール(例:加算ツール)の説明に、信頼できるサーバーのツール(例:メール送信ツール)の動作を変更する指示を含める
  • 結果として、ユーザーが特定の受信者にメールを送信しようとしても、すべてのメールが攻撃者のアドレスに送信されるようになる

参考ソース

https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks

5. トークン窃取とアカウント乗っ取り

こちらは一例ですが、Gmailアクセストークンが奪われることで攻撃者がアカウントを乗っ取るというシナリオです。

攻撃シナリオ

  • MCPサーバーに保存されているOAuthトークン(例:Gmail用)が攻撃者に盗まれると、攻撃者は独自のMCPサーバーインスタンスを作成してそのトークンを使用
  • 被害者の全メール履歴へのアクセス、被害者としてのメール送信、重要な通信の削除などが可能に
  • 盗まれたトークンを通じたアクセスであるため、正当なAPIアクセスとして表示される可能性があり、検出が困難

参考ソース

https://www.pillar.security/blog/the-security-risks-of-model-context-protocol-mcp

まとめ

MCPサーバーはAIアプリケーションが外部リソースと連携できるというとても便利な技術ですが、上記のようなセキュリティリスクも伴っています。

まだ過渡期であるため、これからセキュリティ対策が進んだり、何か他の便利なツールで信頼性をチェックできるようになるかもしれませんが、現状は公式のものでないMCPサーバー基本的には使わないという方針が現状はベストだと思います。

53
Sun* Developers

Discussion

ログインするとコメントできます