AI News HubLIVE
サイト内リライト2 分で読了

MCPサーバーにおけるANSIエスケープシーケンスインジェクション:人間には隠れ、AIには見える

ANSIエスケープシーケンスは、人間のレビュアーには見えないがAIエージェントには見える形で命令を隠すために悪用される可能性があります。この記事では、2つの攻撃バリアント(直接取得型と格納型AESI)と、DAST(動的アプリケーションセキュリティテスト)による自動検出方法について説明します。

ソースHacker News AI著者: xgpyc2qp

ANSIエスケープシーケンスは元々端末向けに設計されたものであり、言語モデル向けではありません。これらの制御コードは端末でレンダリングされる際には不可視ですが、言語モデルはすべてのバイトを読み取ります。攻撃者はこのギャップを利用して、AIエージェントが消費するテキストに隠し命令を埋め込み、人間の審査をバイパスできます。この種の出力中和の失敗は、Kubernetesのkubectl(CVE-2021-25743)やGit(CVE-2024-52005)など実際の製品で発生しています。モデルコンテキストプロトコル(MCP)では、サーバーがツール、リソース、プロンプトを介してテキストをエージェントにストリーミングするため、モデルが読み取るすべてのフィールドがインジェクションの対象となります。

動的アプリケーションセキュリティテスト(DAST)は、この種の脆弱性を検出する自然な方法です。外部から実行中のターゲットを操作し、細工された入力を送信して、応答内の脆弱性の証拠を検査します。この記事では、直接取得型AESIと格納型AESIの2つの攻撃バリアントについて説明します。直接取得型攻撃では、攻撃者はANSIエスケープシーケンスと隠し命令を含むURLをホストし、フェッチツールを介してモデルに渡します。格納型攻撃では、ペイロードをストレージに書き込み、別のエントリポイントから読み取る際にトリガーされます。これには永続性、分離、遅延暴露の特性があります。

検出は3つの設計原則に基づいています:生バイトの検査、モデルが消費するフィールドのみの注目、ユニークなトリガーマーカーと3信号確認。DASTスキャナーはペイロードごとに1つのマーカーを使用し、ANSIエスケープバイト、固定命令フレーズ、トリガーマーカーが同じモデル消費フィールドにすべて存在する場合に脆弱性を確認します。直接取得型検出は、フェッチURLをツールパラメーターに注入し、応答を検査することで行われます。格納型検出は3段階で行われます:まずユニークなマーカーを書き込み、次にリフレクションポイントをマッピングし、最後に実際のペイロードを送信して確認します。

MCPサーバーを構築するチームは、制御バイトの除去、データ型の検証、ストレージ書き込みポイントの監査を推奨します。これらの対策により、ANSIインジェクション攻撃を防止し、AIエージェントのセキュリティを確保できます。ANSIエスケープシーケンスの歴史は1970年代に遡り、当時は異なるベンダーのハードウェア端末が互換性のない制御方言を持っていました。ANSI X3.64標準がそれらを統一し、プログラムはカーソル移動、画面クリア、色設定などのコードを発行できるようになりました。攻撃者はこの制御機能を悪用し、AIエージェントが読み取るテキストに隠し命令を埋め込みます。MCPサーバーでは、モデル消費フィールドにはツール結果のtext、リソース読み取りのtext、プロンプトテンプレートのtextが含まれます。ペイロードが他の場所に現れても悪用できません。セキュリティへの影響には、不正なエージェントアクション、人間の監視の回避、ログと監査証跡の操作、永続的なインジェクションリスクが含まれます。自動検出の核心は攻撃を繰り返し可能なテストに変換することで、生バイト検査、モデル消費フィールドへの焦点、ユニークなトリガーマーカー、3信号確認により低ノイズ検出を実現します。