Google Cloud Vertex AI、モデルハイジャックとポイズニング攻撃を可能にする脆弱性が発覚

Python向けGoogle Cloud Vertex AI SDKに深刻な脆弱性が公開されました。この脆弱性を悪用すると、攻撃者は被害者のクラウドプロジェクトへの初期アクセスなしに、モデルのアップロードを乗っ取り、悪意のあるペイロードを注入し、リモートコード実行(RCE)を達成できます。

この脆弱性はGoogleへ責任を持って開示され、すでにパッチがリリースされています。

Palo Alto Networks Unit 42の研究者がこの脆弱性を発見し、「Pickle in the Middle」と命名しました。原因はSDKのステージングロジックに存在する設計上の欠陥です。

開発者がカスタムのステージングバケットを指定せずにVertex AIのモデルレジストリへモデルをアップロードすると、SDKはプロジェクトIDとリージョンに基づいた決定論的なパターンでバケット名を自動生成します(例:my-project-vertex-staging-us-central1)。

ここに致命的な欠陥があります。SDKはバケットの存在を確認しますが、所有権を検証しないのです。

つまり、被害者のプロジェクトIDを知っている攻撃者は、予測されるバケット名を自分のGoogle Cloudプロジェクトに先回りして登録することができます。その結果、被害者のSDKはモデルの成果物を攻撃者が管理するストレージに警告なく直接アップロードしてしまいます。

影響を受けるバージョンはgoogle-cloud-aiplatform 1.139.0および1.140.0です。攻撃は6段階で展開され、必要なものはGoogleクラウドアカウントと被害者のプロジェクトIDの知識だけです。

まず攻撃者は、被害者の予測ステージングバケットをオープンなIAM権限で事前作成し、認証済みのGoogle Cloudアイデンティティであれば誰でも読み書きできる状態にします。

次に、google.storage.object.finalizeトリガーを持つCloud Functionをデプロイし、アップロードされたファイルをほぼリアルタイムで自動検出・置換できるようにします。

被害者がステージングバケットを指定せずに標準的なSDKコードを実行すると、SDKは何も警告を出すことなく攻撃者が事前作成したバケットにモデルの成果物をアップロードします。

その後、攻撃者のCloud Functionが約800ミリ秒以内に起動し、Vertex AIの内部サービスエージェントが読み取る前に、正規のモデルを悪意のあるpickleペイロードに置き換えます。

被害者のアップロードからサービスエージェントの読み取りまでの競合状態のウィンドウは約2.5秒と計測されており、Cloud Functionがこの入れ替えを完了するには十分な時間があります。

攻撃の最終段階では、MLモデルのシリアライズに広く使われるPythonのpickleおよびjoblibライブラリの既知の特性が悪用されます。

pickleファイルを制御できる攻撃者は、__reduce__メソッドを定義することで、joblib.load()が呼び出された瞬間に、いかなる検証よりも前に任意のPythonコードを実行させることができます。

Unit 42の概念実証では、ペイロードがGoogle Compute Engineのメタデータサーバーに対してサービングコンテナのサービスアカウント認証情報を照会し、プロジェクト番号、エンドポイントID、Kubernetesメタデータなどの環境変数とともに攻撃者が管理するWebhookへ送信しました。

流出したOAuthトークンはGoogle Cloudで最も広い権限スコープである「cloud-platform」スコープを持っており、デプロイをまたいだモデルの窃取、BigQueryの偵察、そしてGoogleのマネージドテナントプロジェクトからのCloud Loggingへのアクセスが可能になります。

この脆弱性は2026年3月5日にVulnerability Reward Programを通じてGoogleへ報告され、3月10日までに最高深刻度として認定されました。

Googleは2つの修正を展開しました。2026年3月31日リリースのv1.144.0ではバケット名のランダム化が導入され、2026年4月15日リリースのv1.148.0では明示的なバケット所有権の検証が追加されました。

開発者はGoogle Cloud AI Platform v1.148.0以降への即時アップグレードが推奨されます。また、ベストプラクティスとしてstaging_bucketパラメータに管理下のGCSロケーションを明示的に指定することで、アセットの完全な分離が実現され、SDKのデフォルト動作への依存をなくすことができます。

CISOおよびセキュリティリーダーへ:次の侵害は「顔のない攻撃者」かもしれません。ISC2のLIVEウェビナー「Ghost in the Machine」にご参加ください。

翻訳元: https://cyberpress.org/google-cloud-vertex-ai-flaw/

ソース: cyberpress.org