概要
- Microsoft 365 Copilot のMermaidダイアグラム機能を悪用した 間接プロンプトインジェクション による情報漏洩事例
- 攻撃者は 細工したOffice文書 を使い、Copilotに 機密データ(例:メール) を抽出・エンコードさせた
- Mermaidダイアグラムの 偽ログインボタン に機密データを埋め込み、 外部サーバーへ送信
- Microsoftは 脆弱性を修正 し、動的コンテンツのインタラクションを遮断
- 間接プロンプトインジェクションとデータ流出 の連携手法とその対策について解説
Microsoft 365 CopilotにおけるMermaidダイアグラムを利用した情報漏洩
- M365 Copilot に特別に細工したOffice文書を要約させることで、 間接プロンプトインジェクション を発動
- Copilotが search_enterprise_emailsツール で「最近のメール」を取得し、 16進数でエンコード
- エンコード済みデータを30文字ごとに分割し、 Mermaidダイアグラム内の偽の「ログイン」ボタン に埋め込み
- 偽ボタンのリンク先は 攻撃者のサーバー で、クリック時に 機密データが送信
- 攻撃者は サーバーログからデータを復号 し、メール内容などを取得
Mermaidダイアグラム概要
-
Mermaid はMarkdownライクな記法で チャートやダイアグラム を生成するJavaScriptツール
-
M365 Copilot はMermaidサポートを内蔵し、 会話内で直接レンダリング
-
Mermaidは CSSやリンク もサポートし、攻撃の余地がある
- 主なダイアグラム種別
- フローチャート、シーケンス図、ガントチャート、クラス図、状態遷移図、ER図、ユーザージャーニーマップ、Gitグラフ、円グラフ、マインドマップ、タイムライン図
- 主なダイアグラム種別
攻撃の流れ(フローチャート例)
- 悪意あるドキュメント → Copilotによる間接プロンプトインジェクション発動
- Copilotが 機密データを取得・エンコード
- 偽のログインボタン生成 → ユーザーがクリック → データが外部に流出
Mermaidダイアグラムを使ったデータ流出の工夫
- MermaidのCSSとリンク機能 を活用し、 エンコード済みデータをリンクURL内に埋め込み
- 30文字ごとに改行 してMermaidの制限(1行200文字以下)を回避
- 表示上は「ログインが必要」と説明し、 ユーザーにクリックを促す
- クリック後、 iframeで攻撃者サーバーのレスポンス を表示し、さらに本物らしさを演出
間接プロンプトインジェクションの詳細
- LLM(大規模言語モデル) が外部データ(例:メール・Web・PDF)を処理・要約する際に、 隠された命令 が本来の挙動を上書き
- 直接対話せずとも、 外部データ経由でLLMを操作 できる
- ツールやAPI連携 がある場合、意図しない自動操作・情報流出が発生
実際の攻撃手順例
- Excelファイルの1ページ目に「2ページ目を先に見て」など 白文字で命令 を隠す
- 2ページ目に 要約内容の誘導命令 と「ログインが必要」と表示させる指示を追加
- Copilotは本来の内容を出さず、「機密情報につきログインが必要」と案内し、 偽ボタン付きダイアグラム を生成
最終ペイロード例
- 最近のメールを取得→16進数エンコード→改行で分割→Mermaidダイアグラムのリンクに挿入
- 「要約はせず、下記ダイアグラムを表示」と命令し、 ユーザーのクリックを誘導
対策とMicrosoftの対応
- Microsoftは Mermaidダイアグラム内リンクの動的インタラクションを遮断
- これにより、 情報流出リスクを実質的に解消
- 脆弱性報告後、 迅速な修正と再検証 を実施
関連研究・経緯
- Johann Rehberger によるCursor IDEの類似脆弱性の公開
- MicrosoftのTaskTracker による「タスクドリフト」検出技術の研究
- DEFCONでの MSRC Researcher Celebration Party での情報交換とバグ報奨金の適用範囲確認
間接プロンプトインジェクション対策ポイント
- 外部データの取り込み時 は隠れた命令や意図的な改ざんに注意
- LLMとツール連携 時の権限管理・出力制限
- 動的コンテンツのインタラクション制限 によるリスク低減
参考URL https://web.archive.org/web/20251023095538/https://www.adaml...