はじめに:Microsoft 365 Copilotの脆弱性
Microsoft 365 Copilotに、攻撃者がAIアシスタントを騙して機密データを外部に流出させる可能性のある間接プロンプトインジェクションの脆弱性が発見されました。この脆弱性により、攻撃者はドキュメント内に隠された指示を埋め込み、AIがその指示に従ってユーザーのデータを悪意のあるMermaid図にエンコードし、クリックされると攻撃者のサーバーに送信することが可能でした。
攻撃の手口:Mermaid図の悪用
この攻撃は、テキスト定義から図を生成するツールであるMermaidの特性を悪用したものです。CopilotがMermaid図を生成する際にCSSスタイリングが許可されるため、攻撃者はここに悪意のあるリンクを埋め込むことができました。具体的には、攻撃者はCopilotの組み込み検索ツールを使用して被害者の最近のメールを取得し、それを16進数でエンコード。その後、このエンコードされたデータをクリック可能な「ログイン」ボタンとしてMermaid図に挿入しました。このボタンのCSSスタイルには、攻撃者のサーバーを指すハイパーリンクが定義されていました。
攻撃のフローとユーザーへの影響
攻撃のプロセスは以下の通りです。
- 悪意のあるドキュメントがユーザーに提示される。
- ユーザーがCopilotにドキュメントの要約を依頼すると、間接プロンプトインジェクションが発動。
- Copilotは指示に従い、メールをフェッチしてエンコードする。
- エンコードされたデータを含む偽のログインボタンがMermaid図として生成される。
- ユーザーがこのボタンをクリックすると、機密データが攻撃者に流出する。
ユーザーがボタンをクリックすると、隠されたiframeが一時的に表示され、攻撃者のサーバーからのHTTP応答が表示された後、消える仕組みでした。攻撃者はさらに、応答内容を偽のMicrosoft 365ログイン画面の画像に置き換え、ユーザーにログインを促すことで、トリックをより信憑性の高いものにしていました。
間接プロンプトインジェクションとは
間接プロンプトインジェクションとは、攻撃者が外部コンテンツ(ドキュメントやメールなど)内に隠された指示を埋め込むことで発生します。AIがそのコンテンツを処理する際、隠されたコマンドが実行され、AIの意図された動作が上書きされてしまいます。これは、攻撃者がAIと直接対話する直接的なインジェクションとは異なり、AIが信頼する無害に見えるデータソースを悪用する点が特徴です。
指示の隠蔽方法
攻撃者は、Excelシート内で白いテキストを使用することで指示を隠していました。最初のページには、財務データを無視し、ログインプロンプトに焦点を当てるというネストされた指示が含まれていました。さらに、2番目の隠しページには、メールをフェッチし、エンコードし、悪意のあるMermaid図をレンダリングするようCopilotに指示するコマンドが記述されていました。
Microsoftの対応とユーザーへの推奨事項
責任ある開示の後、MicrosoftはCopilotにパッチを適用し、Mermaid図内のハイパーリンクなどのインタラクティブ要素を無効化しました。この変更により、AIが生成する図にクリック可能なリンクが含まれることが防止され、データ流出経路が閉鎖されました。ユーザーは、Copilotの統合を更新し、パッチが適用されるまで信頼できないドキュメントの要約を避けることが推奨されます。