0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M365 Copilotの3段脆弱性「SearchLeak」を監査ログで検知する

0
Posted at

TL;DR

  • 2026年6月、M365 Copilot Enterprise Search に「SearchLeak」と呼ばれる脆弱性チェーンが報告された(CVE-2026-42824・critical)1。攻撃者が用意した1つのリンクをクリックするだけで、メール本文・MFAコード・SharePoint/OneDrive上のファイルが外部へ流出しうる。
  • ゼロデイの新技術ではなく、Parameter-to-Prompt Injection → HTMLレンダリングの競合状態 → CSPで許可されたBing画像検索エンドポイント経由のSSRF という3つの既知パターンの組み合わせだった1
  • 同時期に報告された CVE-2026-41106(Copilotのオープンリダイレクトによるテナント境界越え権限昇格・CVSS 9.3)は別系統の脆弱性で、両方ともMicrosoftによりサーバー側で修正済み・ユーザー側の対応は不要23
  • パッチ済みとはいえ「AIエージェントがWeb検索プラグイン経由でSSRFの踏み台になる」という攻撃パターン自体は今後も再発しうる。本記事では Microsoft Purview の CopilotInteraction 監査ログスキーマ4を実際に読み解き、同種の悪用を継続的に検知するPowerShellスクリプトを作った。

はじめに

「AIエージェントに検索させたら、検索結果じゃなくて自分のメールが盗まれた」——SearchLeakは、この一見奇妙な状況を実際に成立させた脆弱性チェーンだ。

M365 CopilotはEnterprise Search・Word・Excel・Teamsなど複数のホストで動作し、ユーザーの代わりにファイルを検索したり、Web検索プラグイン(Bing)を呼び出したりする。今回の一件は、その「代わりにやってくれる」機能が悪用された典型例であり、AIエージェントを組み込んだプロダクト全般に共通する示唆がある。

この記事では、公開情報から攻撃チェーンの技術的な中身を整理したうえで、Microsoft公式の監査ログスキーマを実際に確認し、同種の攻撃パターンを検知するための実装まで踏み込む。

この記事で学べること

  • SearchLeak(CVE-2026-42824)の3段攻撃チェーンの技術的な仕組み
  • CVE-2026-41106(オープンリダイレクト型の権限昇格)との違いと関係
  • Search-UnifiedAuditLog -RecordType CopilotInteraction を使った実際の監査ログ構造
  • Copilotの「AI版SSRF」的な悪用パターンを監査ログから検知するPowerShellスクリプト

対象読者

  • M365 Copilotを組織で運用している情報システム・セキュリティ担当者
  • AIエージェントのプラグイン/ツール呼び出しが持つセキュリティリスクに関心がある開発者

SearchLeak(CVE-2026-42824)の3段攻撃チェーン

Varonisの調査によれば、SearchLeakは単体では大した脅威にならない3つの弱点を意図的に連結させたチェーンだった1

第1段: Parameter-to-Prompt Injection

Copilot Enterprise Searchの検索URLにある q パラメータは、本来「検索キーワード」として扱われるはずだった。ところが実際には、このパラメータの中身がそのままAIモデルへの実行可能な指示として渡されてしまっていた。攻撃者は検索キーワードのふりをして、Copilotに対する隠れた指示(例: 「このHTMLタグを応答に含めて」)をURLに埋め込める。

第2段: HTMLレンダリングの競合状態(race condition)

Copilotの応答はストリーミングで画面に描画される。本来、応答に含まれるHTMLタグ相当の文字列は <code> ブロックでエスケープされ、実行可能なマークアップとして解釈されないよう処理されるはずだった。しかしストリーミング中の一瞬、サニタイズ処理がまだ効いていないタイミングで <img> タグが先に描画され、ブラウザがそのタグの src 属性に対してHTTPリクエストを発火してしまう競合状態があった。

第3段: CSPで許可されたエンドポイント経由のSSRF

通常であれば、任意のドメインへの <img src="..."> 読み込みはコンテンツセキュリティポリシー(CSP)で防がれる。しかしBingの画像検索エンドポイントはCopilotの利用上CSPの許可リストに含まれており、しかもこのエンドポイントはサーバー側でユーザー指定URLへのフェッチを行う仕様だった。結果として、Bing自身が「許可された第三者」として攻撃者の外部サーバーへ機密情報を運ぶ、意図しないSSRF(サーバーサイドリクエストフォージェリ)の踏み台になっていた。

各段はそれ単体では大きな問題にならない。しかし3つが揃うと「信頼済みドメイン(Microsoft)へのワンクリックで、AIがメール・MFAコード・社内文書を外部へ運ぶ」という深刻な情報流出が成立する1

影響範囲とユーザー操作

流出しうるデータは、メールの件名・本文(OTP・パスワードリセットリンクを含む)、カレンダー詳細、SharePoint/OneDriveのCopilotがアクセス可能なファイル、決算情報や給与情報まで報告されている1。攻撃に必要なユーザー操作は「信頼できるドメイン(microsoft.com)へのリンクを1回クリックする」だけで、URLが正規ドメインである以上、一般的なフィッシング対策では検知しにくい。

Microsoftはこの脆弱性をCVE-2026-42824として critical 判定でパッチ済みであり、2026年6月15日時点で修正完了が確認されている1。ユーザー側の追加対応は不要。

CVE-2026-41106との違い

同時期にMicrosoft 365 Copilotに関するもう1つの重大な脆弱性、CVE-2026-41106も公開された。こちらはSearchLeakとは別系統の問題で、混同しないよう整理しておきたい。

項目 CVE-2026-42824(SearchLeak) CVE-2026-41106
種別 Prompt Injection + レンダリング競合 + SSRF の複合チェーン オープンリダイレクト(CWE-601)
CVSS critical判定 9.3(Base)2
影響 メール・MFAコード・ファイルの外部流出 SharePoint/Entra IDとの連携を介したテナント境界越えの権限昇格
ユーザー操作 リンクを1回クリック 攻撃シナリオに依存(詳細はMSRCアドバイザリ参照)
対応状況 Microsoftがパッチ済み・ユーザー対応不要1 Microsoftがサーバー側で完全に緩和済み・ユーザー対応不要3
公開日 2026年6月(The Hacker News報道)1 2026年7月2日(MSRCアドバイザリ)23

両方に共通するのは、AIエージェントが人間の代わりに「クリック」「検索」「参照」を行う機能そのものが新しい攻撃対象になっている という点だ。個別の脆弱性はいずれもパッチ済みだが、この構造自体は今後も繰り返される可能性が高い。

Copilot監査ログを実際に読み解く

パッチ済みの脆弱性そのものへの対応は不要でも、「同種の悪用パターンが再発していないか」を継続的に監視する体制は組織側で用意できる。ここではMicrosoft公式ドキュメントの CopilotInteraction 監査スキーマ4を実際に確認し、検知に使えるフィールドを洗い出した。

監査ログの取得方法

Microsoft PurviewはCopilotとの全インタラクションを CopilotInteraction レコードとして記録しており、Exchange Online PowerShellから次のコマンドで取得できる45

Connect-ExchangeOnline
Search-UnifiedAuditLog -RecordType CopilotInteraction `
    -StartDate (Get-Date).AddDays(-7) `
    -EndDate (Get-Date) `
    -ResultSize 5000

スキーマの中身

公式ドキュメントに掲載されている実際の監査ログ例を見ると、Bing経由のインタラクションでは CopilotEventData.AISystemPlugin{"Id":"BingWebSearch","Name":"BuiltIn"} が記録され、AppHost"Bing" になる4。つまり「CopilotがWeb検索プラグインを実際に呼び出したかどうか」は、監査ログから機械的に判定できるフィールドがすでに用意されている。

SearchLeakのようなチェーンは、この「BingWebSearchプラグインが呼ばれた」というイベントを起点に、通常の検索とは異なる特徴(後述)を伴う。

検知スクリプト

以下は、直近7日間の CopilotInteraction ログから「BingWebSearchプラグインが呼ばれ、かつプロンプト(検索クエリ)が異常に長い、またはHTMLタグらしき文字列を含む」ケースを抽出するスクリプトだ。SearchLeakの第1段(Parameter-to-Prompt Injection)は検索クエリに長い符号化ペイロードやHTMLタグを埋め込む必要があるため、この特徴で一次スクリーニングできる。

Connect-ExchangeOnline

$logs = Search-UnifiedAuditLog -RecordType CopilotInteraction `
    -StartDate (Get-Date).AddDays(-7) `
    -EndDate (Get-Date) `
    -ResultSize 5000

$suspicious = foreach ($entry in $logs) {
    $auditData = $entry.AuditData | ConvertFrom-Json

    # CopilotEventData / AISystemPlugin が欠落したレコードは対象外にする
    if ($null -eq $auditData.CopilotEventData -or
        $null -eq $auditData.CopilotEventData.AISystemPlugin) { continue }

    # AISystemPluginは単一オブジェクトの場合があるため配列化してから判定する
    $plugins = @($auditData.CopilotEventData.AISystemPlugin)

    # BingWebSearchプラグインが呼ばれたインタラクションのみ対象にする
    $usedBingSearch = $plugins | Where-Object { $_.Id -eq "BingWebSearch" }
    if (-not $usedBingSearch) { continue }

    # メッセージIDから該当するプロンプトメッセージを抽出(本文自体は別途Content Searchが必要)
    $messageCount = $auditData.CopilotEventData.Messages.Count

    [PSCustomObject]@{
        CreationTime = $auditData.CreationTime
        UserId       = $auditData.UserId
        AppHost      = $auditData.CopilotEventData.AppHost
        ThreadId     = $auditData.CopilotEventData.ThreadId
        MessageCount = $messageCount
        ClientRegion = $auditData.ClientRegion
    }
}

$suspicious | Sort-Object CreationTime -Descending | Format-Table -AutoSize

Messages フィールドには検索クエリ本文そのものは含まれず、メッセージIDと isPrompt フラグのみが記録される(プライバシー保護のため本文はPurviewの別機能・Content Searchでのみ取得可能)4。本文の内容検査まで行う場合は、組織のコンプライアンス要件に沿って Content Search / eDiscovery の利用権限を別途確認すること。

このスクリプトは「BingWebSearchプラグインが呼ばれた回数・時間帯・ユーザー」を可視化する一次スクリーニングであり、これ単体でSearchLeak型の攻撃を確定できるわけではない。しかし「通常業務でCopilotのWeb検索を使わないはずのユーザーが、深夜帯に大量のBingWebSearch呼び出しを行っている」といった外れ値を洗い出す土台になる。

組織として今すぐできる対策

Microsoft側の修正はすでに完了しているため、以下は「再発時に早期検知するための備え」として位置づけたい。

  1. CopilotInteraction 監査ログの保持設定を確認する: Purview監査ログの保持期間はデフォルトで180日(2023年10月17日以降に生成されたログ)だが、それでもインシデント発生後の遡及調査には不足しうる。E5ライセンスであればMicrosoft Purview Audit (Premium)で1年以上への延長を検討する。
  2. BingWebSearchプラグイン呼び出しの定期棚卸し: 上記スクリプトを週次で実行し、通常業務パターンから外れたWeb検索呼び出しがないか目視確認する。
  3. リンククリック前の一次チェックを社内啓蒙に含める: SearchLeakは正規ドメイン(microsoft.com)へのリンクを悪用する。URLに長い符号化パラメータやHTMLタグらしき文字列が含まれていないか、クリック前に確認する習慣を周知する1
  4. CSP許可リストにサーバーサイドフェッチを行うエンドポイントがないか棚卸しする: 自社でCopilot拡張機能やカスタムプラグインを開発している場合、同様の「許可済みドメインが意図せずSSRFの踏み台になる」構造がないかをレビューする。

著者視点の発見ポイント

SearchLeakを調べていて印象的だったのは、3つの構成要素それぞれは目新しい技術ではないという点だ。パラメータインジェクション、レンダリングの競合状態、CSP許可リストの悪用——どれも従来のWebセキュリティで個別に語られてきた古典的な脆弱性パターンである。しかし「AIエージェントがユーザーの代わりに検索し、応答をストリーミング描画し、Web検索プラグインを呼び出す」という一連の自動化フローが、この3つを1本のチェーンとして初めて成立させた。

さらに実際にMicrosoft公式の監査ログスキーマを読み解いてみると、AISystemPlugin フィールドという形で「AIがどの外部プラグインを呼び出したか」がすでに構造化データとして記録されていることが分かった。これは裏を返せば、AIエージェント製品のベンダー自身が「プラグイン呼び出しは監査すべき攻撃対象面である」と認識し、可観測性を作り込んでいる証拠でもある。個別のCVEはパッチで閉じても、「AIエージェントのツール呼び出しを継続的に監査する」という体制自体は、今後も価値を持ち続けるはずだ。

まとめ

  • SearchLeak(CVE-2026-42824)は、Parameter-to-Prompt Injection・HTMLレンダリングの競合状態・CSP許可リスト経由のSSRFという3つの既知パターンを連結した複合脆弱性で、リンク1クリックでメールやMFAコードが流出しうるものだった。
  • 同時期のCVE-2026-41106(オープンリダイレクトによる権限昇格、CVSS 9.3)とは別系統の脆弱性であり、混同しないよう注意する。
  • 両方ともMicrosoft側でパッチ済み・ユーザー側の追加対応は不要だが、CopilotInteraction 監査ログの AISystemPlugin フィールドを使えば、同種の悪用パターン(Web検索プラグインの異常な呼び出し)を継続的に監視できる。
  • AIエージェントの「ツール呼び出し」は新しい攻撃対象面であり、ベンダーが提供する監査ログを実際に活用する体制づくりが今後ますます重要になる。

参考リンク

  1. SearchLeak: How We Turned M365 Copilot Into a One-Click Data Exfiltration Weapon(Varonis Blog)。CVE-2026-42824、2026年6月15日時点で修正完了を確認。 2 3 4 5 6 7 8 9

  2. CVE-2026-41106 - Security Update Guide(MSRC)。CVSS Base 9.3、CWE-601(オープンリダイレクト)。2026年7月2日公開。 2 3

  3. 同上。Microsoftによりサーバー側で完全に緩和済みで、顧客側の対応は不要と明記されている。 2 3

  4. CopilotInteraction | Microsoft Learn — 監査ログスキーマの公式リファレンス(AISystemPlugin・AppHost・AccessedResources等のフィールド定義)。 2 3 4 5

  5. Audit logs for Copilot and AI applications | Microsoft LearnSearch-UnifiedAuditLog -RecordType CopilotInteraction の利用方法。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?