{本ブログは自動翻訳です} 2024年9月16日
概要:
Document 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 から任意の Cloud Storage バケットにデータを流出させ、アクセス制御を回避して機密情報を流出させることが可能です。
サービス(およびその ID)を利用してデータを盗み出すことは、推移的アクセスの悪用となり、予想されるアクセス制御を回避し、データの機密性を危険にさらします。
前提条件
- 既存のDocument AI プロセッサー
ターゲットプロジェクトにプロセッサが存在するとします。この場合、悪意のあるアクターはdocumentai.processors.processBatchまたはdocumentai.processorVersions.processBatchパーミッションだけあれば、プロセッサを使用し、プロジェクト内の任意のクラウドストレージバケットからデータを読み取り、任意のバケットにオブジェクトを流出させることができます。
- プロセッサーの作成と更新
ターゲットプロジェクトにプロセッサーが存在しない場合、悪意のあるアクターはさらにdocumentai.processors.createパーミッションを使って、クラウドストレージのバケットから読み込むのに適したプロセッサーを作成し、出力を別のバケットに書き込む必要があります。あるいは、プロセッサをdocumentai.processors.updateパーミッションで変更し、GCSバケット経由で取り込めるようにすることもできます。
- Document AI 未使用
DocumentAIがプロジェクトで使用されていない場合、攻撃者はプロセッサを作成または使用する前にサービスを有効にする必要があります。GCPプロジェクトで新しいサービスを有効にするには、serviceusage.services.enableCloud IAM権限が必要で、粗い粒度のRole EditorとOwnerとともに25以上の事前定義されたRoleに含まれています。DocumentAIサービスを有効にすると、関連するサービスエージェントと自動割り当てされたプロジェクトレベルのRoleが作成され、サービスイネーブラーの*.setIamPolicyパーミッションは不要になります。
概念実証
4つのTerraformモジュールが、Document AIによるデータ流出を実証するために提供されています。2つのモジュールは Processors.processBatchと processorVersions.processBatchメソッドをそれぞれ利用し、サービスエージェントの広範な権限を活用して、入力Cloud Storageバケットからユーザー指定の出力バケットにデータをコピーします。対照的に、残りの2つのモジュールは、標準的なオンラインモードであるprocessors.processとprocessorVersions.processを示し、元の呼び出し元のコンテキストで入力データを取得し、期待されるアクセス制御を遵守する。バッチ処理メソッドは、DocumentAIサービスエージェントとしてジョブを実行することで、これらの制御を効果的に回避します。
Googleの反応
この推移的アクセスの悪用事例は、2024 年 4 月 4 日に脆弱性報奨プログラムを通じて Google に報告されました。問題の根本原因を特定し、解決策を提案するために研究者が数か月間取り組んだ後、Google はレポートを脆弱性として受け入れ、その他のデータ/システムを S2C「重要なセキュリティ制御のバイパス」カテゴリに分類しました。同社は 7 月 2 日に計画されている公開について通知を受けました。
報告書のタイムラインの全容は以下で見ることができるが、特筆すべきは以下のコメント/行動です。
- グーグルは「......この問題は、文書が不十分であるか、間違っていることが原因である」と判断した。
- 同社の脆弱性報奨プログラム(VRP)を通じてトリアージされた報告書は、問題が継続しているにもかかわらず、ステータスが「修正済み」に変更された。
- に注意欄が追加された。 DocumentAI IAMロール のアクセス許可は、以下のとおりです。 ドキュメント作成 とdocumentai.datasets.update は非常に恵まれている」。
- 以下の警告ボックスは、2023年12月9日のInternet Archiveスナップショットの後に追加されたものです。 それが私の報告書レスポンス に追加されたものなのかどうかは知る由もない。
- グーグルは、「文書が不十分または不正確であった」ことを根本的な原因として、報奨金を差し控える決定を取り消した。バグ提出は現在、「重要なセキュリティ制御のバイパス」に分類され、報奨金が授与されている。この悪用事例がいつ、どのように修正されるかはまだ明らかにされていない。
Googleへの提言
Document AI サービス エージェントには、広範なプロジェクト レベルの権限を自動的に割り当てないでください。Google が管理するサービス アカウントを利用すると運用上のメリットが得られますが、ユーザー定義の入出力場所と組み合わせて無制限の Cloud Storage アクセスを許可すると、推移的アクセスの悪用による重大なセキュリティ リスクが生じます。サービスは意図したとおりに動作しているかもしれませんが、期待どおりには動作していない可能性があります。
Google Cloudのお客様への影響
以下の組織ポリシー制約により、DocumentAIサービスの有効化とその利用を防止していない場合、すべてのGoogle Cloud顧客がこの脆弱性の影響を受けます。現在、DocumentAI を使用していなくても影響を受けます。 攻撃者がこのサービスを有効にするだけで、重要なデータが流出する危険性があります。
IAM 権限が相互に連鎖的な影響を及ぼす場合、特定のサービスで「何が問題になる可能性があるか」という質問に答えることは不可能になります。Google が顧客を保護するために次に何をするのか、組織ポリシーの制約を提供するのか、それともこの推移的アクセスの悪用ケースを完全に排除するのかは不明です。
緩和策
残念ながら、Google の脆弱性報奨プログラム (VRP) を通じて提出されたレポートは、最大限の努力にもかかわらず、サービスに何の変更ももたらしませんでした。以下で説明する移行は、根本的な脆弱性に対処するものではなく、顧客への潜在的な影響を軽減するだけです。
1.プロジェクトレベルの細分化:Document AI は、セグメント化され隔離されたプロジェクトで使用されるべきである。機密データを含むプロジェクトに、Document AI サービスを混在させないでください。SaaS または ETL サービスを使用する場合は、入力と出力の場所をプロジェクト横断的に構成する。これにより、自動付与に依存するのではなく、任意のサービスエージェントのIAM権限を手動でバインドすることになります。
2.APIとサービスを制限する:組織ポリシー制約serviceuser.servicesを使用して、必要でないときにDocument 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]:「いつも迅速なトリアージをありがとう。現在のコンフィギュレーションのリスクについて、私でお役に立てることがあれば、遠慮なくご連絡ください。ありがとう、Kat」
- 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]:「ご返信いただきありがとうございます!」
- 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]:「ありがとう。このレポートのステータスを「修正済み」から変更してもよろしいでしょうか。修正されていないので、ありがとうございます。Kat」
- 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シリーズを参照してください: