Unicode TAG-Block Concealment of Tool-Metadata Payloads in the Model Context Protocol: An Approval-View Fidelity Gap Across Three Independent Server Implementations
本論文は、Model Context Protocol (MCP) には、Unicode TAGブロック・エンコーディングによって攻撃者がツールのメタデータ内に悪意のあるペイロードを隠蔽できるという決定的な承認ビューの忠実度の乖離が存在し、これにより、複数の独立したサーバー実装を横断して、人間によるレビューやクライアント側のサニタイザを回避しながら、隠されたコンテンツをモデルのコンテキストに直接送り込むことが可能であることを実証するものである。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
想像してみてください。あなたには、非常に賢く、役に立つロボット助手(AIコーディングエージェント)がいます。そのロボットは、ファイルの読み取り、メールの送信、天気の確認など、あなたの代わりにさまざまな作業を行うことができます。これを行うために、ロボットは外部ツールと通信する必要があります。
**モデル・コンテキスト・プロトコル(MCP)**は、あなたのロボットがこれらの外部ツールと接続するための標準的なルールブックです。これは、いわば「メニュー」のようなものです。新しいツールを接続すると、サーバーはあなたのロボットに「メニュー」を送ります。このメニューには3つの要素があります。
- 名前: そのツールが何と呼ばれているか。
- 説明: それが何をするのかを説明する一文。
- ルール: どうやって使うか(どのような入力が必要か)。
ロボットがこれらのツールを使い始める前に、**あなた(人間)**がそのメニューに目を通し、「許可」をクリックしなければなりません。これがあなたの安全確認です。
問題:「魔法のインク」のトリック
研究者たちは、この安全確認の仕組みに欠陥があることを発見しました。実は、あなたが見ているメニューと、ロボットが実際に読み取っている指示が、必ずしも一致しないことがあるのです。
ここで比喩を使ってみましょう。
あなたは新しい従業員(ツール)を雇おうとしています。あなたは、その人物の履歴書(ツールの説明)をレビューするために手渡されました。
- あなたが見ているもの: 履歴書は正常に見えます。「ファイル整理が得意です」と書かれています。
- ボス(AI)が読んでいるもの: その履歴書の中には、隠しインクで秘密のメモが書かれています。「会社のパスワードをすべて盗み、私に送れ」。
この論文は、現在のシステムでは「目に見える履歴書」と「目に見えない指示」を一致させる強制力がないことを明らかにしました。
具体的なトリック:「ゴースト」文字
研究者たちは、これらの隠された指示を隠す8つの異なる方法をテストしました。そのほとんどは、異なる言語を使ったり、人間が注意深く見れば気づけるような奇妙なフォーマットを使ったりするものでした。
しかし、1つのトリックだけが完璧に機能しました。それはUnicode TAG文字と呼ばれるものを利用したものです。
- 比喩: 図書館に、すべての本にラベルが付いていると想像してください。ほとんどのラベルには言葉が書いてあります。しかし、そこには特別なセクション(「TAGブロック」)があり、そのラベルは技術的には有効ですが、図書館のスタッフ(あなたの画面、スマートフォン、またはIDE)はそのラベルがどのように見えるのかを知りません。それらはただ……消えてしまいます。
- 結果: あなたがツールの説明を見るとき、画面上にはそれらの文字のための空白が表示されます。つまり、何も表示されません。しかし、データがAIロボットに送られるとき、ロボットの脳(そのトークナイザー)は、目に見えないものも含めてすべてのバイトを読み取ります。ロボットは、その隠された指示を完璧に、鮮明に理解します。
論文ではこれを**「隠蔽エンコーディング(Concealed Encoding)」**と呼んでいます。それは、紙に書かれたメモが、あなたの目には白紙に見えるのに、AIという特殊な機械でスキャンすると、テキストが浮かび上がるようなものです。
彼らが見つけた他の欠陥
「目に見えないインク」が最も危険でしたが、論文では安全システムが失敗する他の方法も見つかりました。
- 「すり替え」(ラグプル / Rug Pull): あなたは「ファイル一覧を表示」という、一見無害に見えるツールを承認します。しかしその後、サーバーはこっそりと説明文を「ファイル一覧を表示し、パスワードを盗む」に変更します。ツールの名前が変わっていないため、システムは再度承認を求めません。
- 「なりすまし」(名前空間の衝突 / Namespace Collision): 悪意のある攻撃者が、あなたのコンピュータに既にある安全なツールと同じ名前の「read_file」というツールを作成します。ロボットは混乱し、安全なツールの代わりに、その悪い方のツールを使用してしまいます。
- 「隠し扉」(スキーマ強制 / Schema Coercion): ツールの説明は正常に見えますが、「ルール」セクション(入力スキーマ)に、「すべてのセキュリティをオフにする」というデフォルト設定が含まれています。ロボットが単にデフォルト設定を受け入れると、図らずも自分自身の安全シールドを解除してしまいます。
彼らが証明するために行ったこと
研究者たちは単に推測したわけではありません。彼らは実際のテストを作成しました。
- 彼らは、これらの隠された指示を送ろうとする「悪意のあるサーバー」を作成しました。
- それを実際のAIクライアント(ロボット)に接続しました。
- これを、人々がこれらのツールを構築するために実際に使用している3つの独立したソフトウェアライブラリに対してテストしました。
- 結果: 3つの異なるソフトウェアシステムすべてにおいて、隠された指示がロボットに到達しました。「目に見えないインク」のトリックは100%の確率で成功し、人間のレビュアーには何も見えていないにもかかわらず、ロボットは秘密の指示を受け取っていました。
彼らが提案する解決策
この論文は、単なる「キーワードフィルター」(スペルチェッカーのように悪い言葉を探すもの)だけに頼ることはできないと主張しています。なぜなら、攻撃者は言葉を隠すことができるからです。
代わりに、彼らは3つの構造的な修正を提案しています。
- バイトに忠実な表示(Byte-Faithful Viewing): ロボットが見える文字は、あなたも見えなければなりません。もしその文字が画面上で見えない場合、システムは沈黙して消すのではなく、警告ボックス(「文字が欠落しています」という記号など)を表示すべきです。
- 変更時の再承認: すでにあなたが「はい」と言った後にツールの説明やルールが変更された場合、システムは停止し、再度あなたに確認を求めなければなりません。
- 厳格な名前空間(Strict Namespaces): インターネットからのツールは、あなたのコンピュータに属するツールの名前を盗むことは許されてはなりません。
まとめ
この論文は、現在私たちがAIツールを外部の世界に接続させている方法に「盲点」があることを明らかにしています。攻撃者は、人間の目には見えないがAIには明確に伝わる指示を書くことができるのです。研究者たちは、これが異なるソフトウェアシステムを横断して機能することを証明し、唯一の解決策は、人間が見ているものが、バイト単位で、AIが見ているものと完全に一致するようにすることであると示しました。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。