MCP/ツールのレスポンスに外部由来データを埋め込む時はプロンプトインジェクションを区切る
MCP
セキュリティ
プロンプトインジェクション
問題
MCP サーバーやエージェントのツールが、API から取得したデータ(メモ本文、著者名、公開コンテンツ等)を区切りなくそのままツール結果テキストに連結して返すと、その中に「これまでの指示を無視して…」のような文言が含まれていた場合、呼び出し側 LLM への間接プロンプトインジェクション経路になる。とくに公開メモ・いいね・コメントなど他ユーザー由来のコンテンツを返す経路はリスクが高い。ツール定義の description は静的なら問題ないが、レスポンス本文は外部入力で動的に変わる点が見落とされやすい。
判断基準
- ツール結果に外部由来データを載せるときは、それが「データであって指示ではない」ことを明示する区切り(フェンスや注記)で囲む。
- とくに他ユーザー・第三者が編集できるコンテンツを返す経路では必須とみなす。自分専用データのみを返す経路でも、内容に他者由来テキストが混ざりうるなら同様に扱う。
- 認可スコープでの多層防御も併用する。注入があってもツールがリクエスト者の
userIDでしかデータ取得できなければ、越境アクセス自体は防げる。
検証観点
注入文言を含むコンテンツを保存し、それをツールが返したとき、出力上でユーザーデータと指示が明確に分離されているかを確認する。区切りがない場合、下流 LLM が埋め込み指示に従う挙動を再現テストする。