MCPにおけるUnicode TAGブロックを用いたツールメタデータ隠蔽手法──人間には不可視でモデルには到達
Model Context Protocolの承認画面とモデル入力間の乖離を突く手法を提案し、3つの独立したサーバー実装で全8手法中唯一TAGブロック手法のみが検知を回避することを実証した。
リリース: 2026-07-07 · 読了 8 分論文概要
本論文は、AIエージェントのツール利用標準であるModel Context Protocol (MCP) におけるセキュリティ上の脆弱性を指摘した研究である。MCPでは、ツールメタデータ(名前、説明、JSONスキーマ)が人間による承認画面で表示された後、そのままモデルのコンテキストへ注入される。著者は、UnicodeのTAGブロック(U+E0000〜U+E007F)が主要なレンダラーで表示されない性質を利用し、人間には不可視かつモデルには確実に到達する「隠蔽エンコーディング」手法を提案した。

関連研究
MCPはコーディングエージェントの標準プロトコルとして普及が進んでいるが、その承認フローにおけるセキュリティ境界の検証はこれまで限定的であった。本研究は、プロトコルレベルのハンドシェイクとモデルへの入力という2つの異なるフェーズにおけるデータの不一致(Fidelity Gap)に着目した点で先行する知見を補完する。
新規性と貢献
本研究の最大の貢献は、MCPの実装における「承認画面とモデル入力の乖離」を体系化した点にある。特に、UnicodeのTAGブロックを用いることで、既存の文字列ベースのサニタイザーを回避しつつ、モデルには意図したペイロードをそのまま渡す手法を確立した。また、3つの独立したPython MCPサーバー実装を用いて、この脆弱性が特定のライブラリ依存ではなくプロトコル設計に起因することを証明した。
提案手法の詳細
本研究では、プロトコルレベルのハンドシェイクを模倣するハーネスを用い、8つの攻撃手法を実装した。TAGブロックを用いた手法(T7)は、以下の理由で有効である。
- 不可視性: Unicode TAGブロックは現在のIDEやチャットインターフェースでグリフを持たないため、人間は表示を確認できない。
- 不変性: トークナイザーはこれらのバイト列をそのまま処理するため、モデルには攻撃者が意図した指示やデータが完全に到達する。

評価・考察
著者は5つのメタデータ表面に対して8つの手法を適用し、その結果を評価した。
| 指標 | 結果 |
|---|---|
| モデルへの到達 | 8/8 |
| サニタイザー回避 | 4/8 |
| 人間によるレビュー回避 | 1/8 (TAGブロックのみ) |
| 再承認の強制 | 0/8 |

特筆すべきは、Time-of-Check to Time-of-Use (TOCTOU) 攻撃を想定しても、MCPは再承認を要求しない点である。この結果は、既存のサニタイザーがTAGブロックによる隠蔽に対して無力であることを示している。
応用例と今後の展望
本研究は、MCPを利用したエージェント開発を行うエンジニアにとって、ツール定義の信頼性確保という喫緊の課題を突きつける。特に、外部から提供されるツール定義をそのままモデルへ渡す実装は、プロンプトインジェクションの温床となる。日本の開発現場においても、MCPサーバーを自社開発する際や、サードパーティ製のツールを導入する際は、メタデータに対して厳格な正規化(Unicodeのフィルタリング等)を実装する必要がある。
結論
本論文は、MCPにおける承認画面とモデル入力の乖離が、Unicodeの特殊文字を用いて容易に悪用可能であることを示した。現在のプロトコル仕様では、人間による確認とモデルへの入力の整合性が担保されておらず、設計の修正が不可欠である。
注釈
- Model Context Protocol (MCP): AIエージェントが外部ツールやデータソースと接続するための標準化されたプロトコル。
- TAGブロック: Unicodeにおいて、特定の言語や書式を指定するために予約されている領域。通常表示されない。