はじめに
Microsoft 365 Copilotに重大な脆弱性が発見され、攻撃者がAIアシスタントを騙して機密データを窃取し、外部に送信できる状態になっていたことが明らかになりました。この攻撃では、文書内に隠された指示を利用し、AIにデータを悪意のあるMermaid図にエンコードさせ、ユーザーが図をクリックすると攻撃者のサーバーに情報が送信されるという手口が用いられました。
攻撃の手口
研究者によると、Microsoft 365 Copilotが特別に作成されたOffice文書を要約するよう求められた際、間接プロンプトインジェクションのペイロードにより、隠されたステップが実行されました。Copilotは通常の要約を生成する代わりに、以下の手順で攻撃を実行しました。
- 最近の企業メールを取得し、それを16進数にエンコード。
- 偽の「ログイン」ボタンとしてMermaid図を構築。
- この図には、エンコードされたデータがURLに埋め込まれた、攻撃者のサーバーへのハイパーリンクを含むCSSが含まれていた。
ユーザーがこのボタンをクリックすると、機密情報が攻撃者のログに送信され、後にデコードされる仕組みでした。Mermaidはテキスト定義から図を生成するツールであり、CSSスタイリングをサポートしているため、悪意のあるリンクを埋め込む経路として悪用されました。
攻撃者はCopilotの組み込み検索ツールで被害者の最近のメールを取得し、16進数エンコードされた文字列に変換しました。このデータをクリック可能な「ログイン」ノードに挿入し、ノードのCSSスタイルで攻撃者のサーバーへのハイパーリンクを定義しました。ボタンをクリックすると、隠されたiframeが表示され、攻撃者のサーバーからのHTTP応答が一時的に表示された後、消えることで、より信憑性を高めました。攻撃者は応答内容を偽のMicrosoft 365ログイン画面画像に置き換え、ユーザーに要約を見るためにログインが必要だと信じ込ませました。
間接プロンプトインジェクションとは
間接プロンプトインジェクションは、攻撃者が文書やメールなどの外部コンテンツ内に指示を埋め込むことで発生します。AIがそのコンテンツを処理すると、隠されたコマンドが実行され、攻撃者がAIの意図された動作を上書きできるようになります。直接的なインジェクションとは異なり、間接インジェクションはAIが信頼する一見無害なデータソースを悪用します。
このケースでは、攻撃者はExcelシートで白いテキストを使用し、指示を隠しました。最初のページには、Copilotに財務データを無視し、ログインプロンプトに焦点を当てるよう指示するネストされた指示が含まれていました。2番目の隠されたページでは、Copilotにメールを取得し、エンコードし、悪意のある図をレンダリングするよう指示していました。
マイクロソフトによる対応
マイクロソフトは責任ある開示の後、Copilotをパッチ適用し、Mermaid図内のハイパーリンクなどのインタラクティブ要素を無効化しました。この変更により、AI生成図にクリック可能なリンクが含まれることがなくなり、データ流出経路が閉鎖されました。ユーザーは、パッチが適用されるまでCopilot統合を更新し、信頼できない文書の要約を避けるよう助言されています。