トランシティブ・アクセスの悪用 - ドキュメントAIによるデータ流出

2024年9月16日
Kat Traxler
Principal Security Researcher
トランシティブ・アクセスの悪用 - ドキュメントAIによるデータ流出

2024年9月16

TLDR;

ドキュメントAIサービスでは、ユーザーは意図せず、同じプロジェクト内の任意のクラウドストレージオブジェクトを読むことができます。

  • Document AI サービスの設定ミス:Document AIサービスエージェントに過剰な権限が自動で割り当てられ、同じプロジェクト内のCloud Storageバケットからすべてのオブジェクトにアクセスできる。
  • データ流出リスク:悪意のある行為者は、サービスエージェントの権限を間接的に活用することで、これを悪用してクラウドストレージからデータを流出させることができる。
  • 推移的アクセス乱用:この脆弱性は、信頼された仲介者を介して間接的に不正アクセスが行われるセキュリティ上の欠陥の一種である、推移的アクセス乱用の一例である。 
  • Google Cloud の顧客への影響:この悪用ケースでは、脅威は第一層の「危険なパーミッション」にとどまらず、文書化されていない推移的関係のクモの巣を含むようになる。 

サービスの背景

Document AIは、非構造化ドキュメントから情報を抽出するGoogle Cloudのサービスである。トレーニング済みのモデルと、カスタムモデルを作成するためのプラットフォームの両方を提供している。Vertex AIの一部として、Document AIは他のAIサービスと統合し、モデルの提供や共有を行う。

Document AIは、ドキュメントをバッチ処理する際に、Roledocumentaicore.serviceAgentが割り当てられた、サービスエージェントと呼ばれるGoogleが管理するサービスアカウントを使用する。このアカウントは、データの取り込み、変換、出力を、Cloud Storageの幅広い権限を使って処理する。このアプローチは、明示的な設定と手動での役割割り当てを必要とする顧客管理サービスアカウントを実行に使用する代替案と比較して、アイデンティティの作成と権限の自動割り当てを自動化することで、エンドユーザーの摩擦を軽減します。

 

脆弱性の説明

Document AIでは、オンライン(標準)ジョブとオフライン(バッチ)処理ジョブの両方を作成することで、Cloud Storageに保存されたドキュメントを処理することができます。このサービスは、Roledocumentaicore.serviceAgentを持つDocument AI Core Service Agentを利用して、データの取り込みを処理し、バッチ処理の実行時に結果を出力します。重要なのは、このサービスエージェントは、同じプロジェクト内のどのクラウドストレージバケットにもアクセスできる幅広い権限を持っていることです。 

オンライン処理または標準処理では、Document AIへの最初の呼び出し元がGCSオブジェクトを取得するために使用されるプリンシパルであるが、バッチ処理モードでは、任意の入力データの取得とGCSバケットへの結果の書き込みは、Document AIコアサービスエージェントのコンテキスト下で実行され、事前に割り当てられた権限を使用する。バッチ処理ではサービスエージェントがIDとして使用されるため、最初の呼び出し元の権限制限が尊重されず、データの流出が可能になる。

Document AIサービスは、ユーザー定義の入力ロケーションを取り込み、前処理されたデータを読み込み、出力ロケーションに結果を書き込む。この機能により、悪意のある行為者はGCSから任意のクラウドストレージのバケットにデータを流出させ、アクセス制御をバイパスして機密情報を流出させることができる。

サービス(およびその ID)を活用してデータを流出させることは、期待されるアクセス制御をバイパスし、データの機密性を損なう、推移的アクセスの乱用に該当する。

前提条件

  1. 既存のドキュメントAIプロセッサー

ターゲットプロジェクトにプロセッサが存在するとします。この場合、悪意のあるアクターはdocumentai.processors.processBatchまたはdocumentai.processorVersions.processBatchパーミッションだけあれば、プロセッサを使用し、プロジェクト内の任意のクラウドストレージバケットからデータを読み取り、任意のバケットにオブジェクトを流出させることができます。

  1. プロセッサーの作成と更新

ターゲットプロジェクトにプロセッサーが存在しない場合、悪意のあるアクターはさらにdocumentai.processors.createパーミッションを使って、クラウドストレージのバケットから読み込むのに適したプロセッサーを作成し、出力を別のバケットに書き込む必要があります。あるいは、プロセッサをdocumentai.processors.updateパーミッションで変更し、GCSバケット経由で取り込めるようにすることもできます。 

  1. ドキュメントAI 未使用

DocumentAIがプロジェクトで使用されていない場合、攻撃者はプロセッサを作成または使用する前にサービスを有効にする必要があります。GCPプロジェクトで新しいサービスを有効にするには、serviceusage.services.enableCloud IAM権限が必要で、粗い粒度のRole EditorとOwnerとともに25以上の事前定義されたRoleに含まれています。DocumentAIサービスを有効にすると、関連するサービスエージェントと自動割り当てされたプロジェクトレベルのRoleが作成され、サービスイネーブラーの*.setIamPolicyパーミッションは不要になります。

 

概念実証

4つのTerraformモジュールが、Document AIによるデータ流出を実証するために提供されている。2つのモジュールは Processors.processBatchprocessorVersions.processBatchメソッドをそれぞれ利用し、サービスエージェントの広範な権限を活用して、入力Cloud Storageバケットからユーザー指定の出力バケットにデータをコピーする。対照的に、残りの2つのモジュールは、標準的なオンラインモードであるprocessors.processと processorVersions.processを示し、元の呼び出し元のコンテキストで入力データを取得し、期待されるアクセス制御を遵守する。バッチ処理メソッドは、DocumentAIサービスエージェントとしてジョブを実行することで、これらの制御を効果的に回避します。    

グーグルのレスポンス 

この遷移的アクセス不正使用の事例は、2024年4月4日に脆弱性報奨プログラムを通じてGoogleに報告された。問題の根本的な原因を特定し、解決策を提案するための数ヶ月にわたる研究者の努力の後、グーグルはこの報告を脆弱性として受理し、カテゴリーS2C「重要なセキュリティ制御のバイパス」、その他のデータ/システムに分類した。7月2日に公開予定であることが通知された。

報告書のタイムラインの全容は以下で見ることができるが、特筆すべきは以下のコメント/行動である:

  1. グーグルは「......この問題は、文書が不十分であるか、間違っていることが原因である」と判断した。
  2. 同社の脆弱性報奨プログラム(VRP)を通じてトリアージされた報告書は、問題が継続しているにもかかわらず、ステータスが「修正済み」に変更された。
  3. に注意欄が追加された。 DocumentAI IAMロール のアクセス許可は、以下のとおりです。 ドキュメント作成 とdocumentai.datasets.update は非常に恵まれている」。 
    1. 以下の警告ボックスは、2023年12月9日のInternet Archiveスナップショットの後に追加されたものです。 それが私の報告書レスポンス に追加されたものなのかどうかは知る由もない。

  1. グーグルは、「文書が不十分または不正確であった」ことを根本的な原因として、報奨金を差し控える決定を取り消した。バグ提出は現在、「重要なセキュリティ制御のバイパス」に分類され、報奨金が授与されている。この悪用事例がいつ、どのように修正されるかはまだ明らかにされていない。

グーグルへの提言

 Document AI Service Agent には、プロジェクトレベルの広範な権限を自動的に割り当てるべきではない。Googleが管理するサービス・アカウントを利用することは運用上のメリットがありますが、ユーザー定義の入出力場所と連動して無制限のクラウドストレージ・アクセスを許可することは、遷移的アクセスの乱用による重大なセキュリティリスクをもたらします。サービスは意図したとおりに動いているかもしれないが、期待通りではない。

 

Google Cloudのお客様への影響

以下の組織ポリシー制約により、DocumentAIサービスの有効化とその利用を防止していない場合、すべてのGoogle Cloud顧客がこの脆弱性の影響を受けます。現在、DocumentAI を使用していなくても影響を受けます。 攻撃者がこのサービスを有効にするだけで、重要なデータが流出する危険性があります。

IAMのパーミッションが互いに影響し合うと、どのようなサービスでも「何が問題なのか」という質問に答えることは不可能になる。組織ポリシーの制約を提供するつもりなのか、それともこの推移的アクセス乱用ケースをすべて削除するつもりなのか、顧客を保護するためのグーグルの次のステップは不明だ。

緩和策

残念ながら、Googleの脆弱性報奨プログラム(VRP)を通じて提出された報告書は、最善の努力にもかかわらず、サービスに変更をもたらすものではありませんでした。以下に述べる移行は、根本的な脆弱性に対処するものではなく、顧客の潜在的な影響を軽減するだけである。 

1.プロジェクトレベルの細分化:ドキュメントAIは、セグメント化され隔離されたプロジェクトで使用されるべきである。機密データを含むプロジェクトに、Document AI サービスを混在させないでください。SaaS または ETL サービスを使用する場合は、入力と出力の場所をプロジェクト横断的に構成する。これにより、自動付与に依存するのではなく、任意のサービスエージェントのIAM権限を手動でバインドすることになります。

 2.APIとサービスを制限する:組織ポリシー制約serviceuser.servicesを使用して、必要でないときにドキュメントAIサービスが有効にならないようにし、組織ポリシー制約serviceuser.restrictServiceUsageを使用してAPIの使用を制限する。

結論

役割と権限の付与は、特にサービスの機能と推移的アクセスの可能性を考慮すると、ストーリーの一部しか語らない。トランシティブ・アクセスの悪用は、おそらくDocument AIサービスに限った話ではなく、脅威モデルの誤解が続く限り、サービス(および主要なクラウド・プロバイダー)全体で再発する可能性が高い。

データ・ストレージ、ビジネス・ロジック、ワークロードを異なるプロジェクトにセグメント化することで、過剰な特権を持つサービス・エージェントの爆発半径を小さくすることができるが、顧客は、自社の製品やIAMスキームに特権エスカレーションの経路が構築されていないことを確認するために、クラウド・プロバイダーを頼りにしている。

報告スケジュールとレスポンス

  • 4月4日th 2024年:初回報告文書AIデータ処理によるデータ流出、課題332943600
    • [グーグルVRP]:「ご報告ありがとうございます。このメールにて、ご報告いただいた内容を確認いたしました。ご報告いただいた問題を調査し、アップデートがあり次第ご連絡いたします。それまでは、Google バグに関するよくあるご質問をご覧ください。Google バグハンターに関するよくある質問リスト.
  • 4月8日th 2024:優先順位がP4からP3に、ステータスが新規から割り当てに変更された。
    • [Google VRP]:「あなたの報告がトリアージされ、現在調査中であることをお知らせします。
  • 4月9日th 2024: タイプの変更 Customer Issue -> Bug; 重大度の変更 S4 -> S2; ステータスの変更 Assigned -> In Progress (accepted)
    • [グーグルVRP]:「ご報告ありがとうございます。ご報告に基づき、担当のプロダクトチームにバグを報告しました。製品チームはあなたのレポートを評価し、修正が必要かどうかを判断します。問題が修正されたかどうかは、またお知らせします。脆弱性報奨プログラムについて:一見したところ、この問題は報奨の対象となるほど深刻ではないようです。しかし、VRPパネルは次回の会合でこの問題を詳しく調査する予定です。決定が下りましたら、またご報告いたします。2~3週間経っても連絡がない場合、あるいは脆弱性に関する追加情報をお持ちの場合は、お知らせください!"
  • 2024年4月9日 - [Kat Traxler]:「いつも迅速なトリアージをありがとう。現在のコンフィギュレーションのリスクについて、私でお役に立てることがあれば、遠慮なくご連絡ください。ありがとう、キャット"
  • 2024年4月30日 - [Kat Traxler]:"こんにちは これを受信トレイのトップにこの件が悪用リスクとしてトリアージされたのか、それともサービスのアップデートが控えているのか、お聞かせください。ありがとう、キャット。
  • 2024年5月2日 - [Google VRP]:「パネルメンバーはこの報告書についてまだ決定を下していません。パネルは週に2回会合を開いており、あなたの報告書はすべての会合で考慮されます。遅くなって申し訳ありません。決定が下され次第、自動返信メールをお送りします。"
  • 2024年5月2日 - [Kat Traxler]:「更新ありがとう。もし4週間ほど経っても何の連絡もなかったら、また連絡します。
  • 2024年5月7日 - [Google VRP]:「注:これは自動的に生成されたメールです。**こんにちは、Google 脆弱性報奨プログラムのパネルは、この問題のセキュリティへの影響が金銭的な報奨を受けるための基準を満たさないと判断しました。しかし、Google のセキュリティに対するあなたの貢献を、https://bughunters.google.com/leaderboard/honorable-mentions の Honorable Mentions ページで評価したいと思います。このページへの掲載を希望される方は、https://bughunters.google.com でプロフィールを作成してください。この決定の理由この問題は、文書が不十分または不正確であったためと判断しました。この問題が報われないという事実は、製品チームがこの問題を修正しないということを意味するものではないことにご留意ください。製品チームにバグを報告しました。彼らはあなたのレポートを確認し、修正が必要かどうかを決定します。問題が修正されたかどうかは、またお知らせします。Google セキュリティボットより"
  • 2024年5月7日: - [Kat Traxler]:"Thanks for theレスポンス!"
  • 6月22日nd 2024:ステータスが "Fixed "に変更
    • [Google VRP]:"私たちのシステムによると、あなたの報告に基づいて作成したバグはすべて製品チームによって修正されています。ご遠慮なくご確認いただき、問題がないようでしたらお知らせください。ご協力ありがとうございました。
  • 2024年6月25日-【キャット・トラックスラー「こんにちは。この問題がまだ続いていることがわかりました。ドキュメントとトレーニングデータは、Document AI Core Service Agentの権限を使用してエクスポートすることができ、ストレージにアクセスできないユーザーでもデータを流出させることができます。この機能は、メソッド:google.cloud.documentai.uiv1beta3.DocumentService.ExportDocumentsとバッチ処理機能:(processors.batchProcess&processorVersions.batchProcess&processors.batchProcess)に存在することに注意してください。" さらにPOCが必要な場合はお知らせください。
  • 2024年6月26日 - [Google VRP]:"こんにちは!レスポンス ありがとうございます。この問題に取り組んでいるチームのために内部バグを更新しました。"
  • 2024年7月2日 - [Kat Traxler]:「こんにちは。最近、この問題が修正されたという「誤報」があったため、私はリスクと影響を適切に伝え ていなかったのではないかと心配になりました。そこで、私は TF の配備を作成し、あなたとサービスチームが見ることができるように POC を記録しました。TFの配備はhttps://github.com/KatTraxler/document-ai-samples、このドライブリンクでPOCビデオを見ることができる。注意しなければならない点は、Document AIでドキュメントを処理(またはバッチ処理)できるプリンシパルは、クラウドストレージのデータにアクセスして別の場所に移動(データ流出)するためのストレージ権限を持っている必要はないということです。(roles/documentaicore.serviceAgent)。私は、Document AIに、クラウドワークフローと同様に、データ処理用のユーザー管理サービスアカウントを割り当てることを推奨する。P4SAがユーザー定義のデータを移動できるようにすることは正しいパターンではなく、データ流出の脆弱性につながっています。この問題のステータスを未修正に変更してください。公開は2024年9月の注目されるイベントで行われる予定です。"
  • 2024年7月4日 - [Google VRP]:「本件に関する詳細な情報をありがとうございます。また、レポートの開示についてご指摘いただきありがとうございます。協調的な情報開示に関する当社のスタンスをお読みください。要するに、私たちの誓約は、迅速に対応し、適切な期間内に脆弱性を修正することです。
  • 2024年7月29日 - [Kat Traxler]:「こんにちは、チーム。9月17日に開催されるfwd:CloudsecEUで、DocumentAIサービスを介したデータ流出のリスクについてお話しする予定です。https://pretalx.com/fwd-cloudsec-europe-2024/talk/BTT9LJ/、前日の9月16日に付随するブログを公開します。ありがとう、Kat"
  • 2024年7月30日 - [Google VRP]:「ご忠告ありがとうございます。
  • 2024年8月5日 - [Kat Traxler]:「ありがとう。このレポートのステータスを「修正済み」から変更してもよろしいでしょうか。修正されていないので、ありがとうございます。キャット"
  • 2024年8月12日 - [Google VRP]:「プレゼンテーションやブログ記事の草稿を、公開前に私たちと共有することは可能でしょうか?ありがとうございます。
  • 2024年8月12日Kat Traxlerのコメント: 「喜んで。特に、正確さと予告の調整についてのフィードバックに興味がある。8月26日までにブログ記事を準備します。"
  • 2024年8月13日 - [Google VRP]:「ありがとう
  • 2024年8月21日 - [Google VRP]:「キャット、報告ありがとう!チームでは、あなたの提出された報告について、より詳細に議論しました。これがWAIなのか脆弱性なのかを検討した結果、製品チームにバグを報告することにしました。あなたの視点からは動作が明確ではありませんが、製品チームは何かがWAIであるかどうかを判断するのに最も適した立場にあるため、このようにしました。この内部バグは、あなたのコメントに基づいて7月9日に再開されました。また、issue 332943600も同様に再開します!
    Googleバグハンターチーム"
  • 2024年8月22日 - [Kat Traxler]:「更新とステータスの変更に感謝します。WAIと脆弱性の定義を共有できますか?私にとって、問題とは、意図したとおりに動作する(WAI)ことと、セキュリティに重大な負の影響を与えることの両方です。ありがとう。Kat"
  • 2024年9月9日 - [Google VRP]:「Google 脆弱性報奨プログラム委員会は、あなたの報告に対して 3133.70 ドルの報奨金を発行することを決定しました。おめでとうございます!この決定の理由通常の Google アプリケーション。脆弱性のカテゴリーは「重要なセキュリティ管理のバイパス」、その他のデータ/システム。攻撃者が影響を受ける被害者のプロジェクトにアクセスする必要があるため、ダウングレードを適用しました。"

 関連研究

 GCPサービスエージェントとその脅威モデルの詳細については、GCP IAM 201シリーズを参照してください:

 

 

 

よくあるご質問(FAQ)