MCPツールポイズニング:ツールの説明に隠された指示
Invariant Labsは、MCPサーバーがモデルの読むツール説明に指示を隠せることを示し、tool shadowingやrug pullの手法について解説しました。
何が起きたか
2025年4月1日、Invariant LabsはModel Context Protocolにおけるツールポイズニングについて、セキュリティ通知を公開しました。悪意のあるMCPサーバーは、ツールの説明文に指示を埋め込みます。ユーザーがそのテキストを見ることはほとんどありませんが、モデルはコンテキストの一部として読み取り、その指示に従う可能性があります。
同じ通知では、関連する2つの攻撃についても説明されています。tool shadowingでは、あるサーバーの説明文によって、エージェントが別の信頼済みサーバーのツールを使う方法が変わります。rug pullでは、ユーザーがサーバーを承認した後に、サーバーがツールの説明文を変更します。
なぜ成功したか
クライアントは、接続中のすべてのサーバーのツール説明を1つのコンテキストに読み込みます。モデルは、ベンダーのドキュメントと攻撃者の指示を見分けられません。クライアントがサーバーを一度承認した後に再確認しなければ、その後の変更が見逃されます。
対策
- MCPサーバーに接続する前に、ツール名だけでなく、ツールの説明文をすべて確認してください。
- サーバーのバージョンを固定し、ツール説明のハッシュを記録してください。ハッシュが変わった場合は、再度確認を求めるか、アラートを出してください。
- タスクに必要なサーバーだけを接続し、あるサーバーのテキストが別のサーバーのツールを誘導できないようにしてください。
- データの送信やファイルの変更を伴うツール呼び出しには、承認を必須にしてください。
スキル、プラグイン、MCPサーバーを審査する重大な操作には承認を必須にする