Google Cloud Vertex AI の脆弱性:モデル・アーティファクトを標的とするサプライチェーン攻撃

Google Cloud Vertex AI Allows Attacker to Hijack Victim’s Model and Poison it

2026/06/17 CyberSecurityNews — Google Cloud Vertex AI に新たな脆弱性が発見された。この脆弱性を悪用する攻撃者は、機械学習モデルのアップロードを乗っ取り、被害者の環境で悪意のコードを実行する可能性があった。この調査は、責任ある開示の下で Google に共有された。この問題は Vertex AI Python SDK (google-cloud-aiplatform) に影響し、予測可能なクラウド・ストレージ・バケット名と所有権に対する検証の欠如の組み合わせにより発生する。

Unit 42 の研究者が確認したのは、Vertex AI の脆弱なバージョン 1.139.0/1.140.0 を悪用する攻撃者が、被害者のクラウド・プロジェクトへの初期アクセスを必要とせずに、モデル・ポイズニングおよびリモート・コード実行 (RCE) のリスクを引き起こしたことだ。

Google Vertex AI の乗っ取り

Vertex AI は、機械学習モデルの構築およびデプロイに広く使用されている。開発者が SDK を使用してモデルをアップロードすると、デプロイ前のアーティファクトは、Google Cloud Storage (GCS) バケットに一時的にステージングされる。

この欠陥は、ユーザーがステージング・バケットを指定しない場合に、SDK が予測可能な命名パターンを用いてバケットを生成することで発生する。SDK が検証するのは、そのバケットの存在だけであり、意図されたプロジェクトへの帰属については確認しない。そのため、バケット乗っ取りの機会が生じる。

この挙動により、”Bucket Squatting” と呼ばれる手法が可能になる。攻撃者は、自身のプロジェクト内に、予測されるバケット名を事前に作成する。その結果、被害者のモデル・アーティファクトは、攻撃者が制御するインフラへと密かにアップロードされる。

 Attack chain flow (Source: Unit 42)
Attack chain flow (Source: Unit 42)

Unit 42 の研究者は、この悪用手法を “Pickle in the Middle” と名付けた。これは、Python の pickle デシリアライズを悪用して、コード実行を達成するものである。

複数の段階で進行する攻撃
  • 攻撃者は、寛容なアクセス制御を設定した上で、予測した被害者のデフォルト・バケット名を自身のプロジェクト内に作成する。
  • 被害者がモデルをアップロードすると、SDK はアーティファクトを攻撃者のバケットへ送信する。
  • 悪意の Cloud Function がアップロードを検出し、数ミリ秒以内にモデル・ファイルを置き換える。
  • ポイズニングされたモデルは、その後 Vertex AI インフラによりデプロイされる。
  • モデル読み込み時に、pickle デシリアライズが攻撃者の制御するコードを実行する。

このプロセスは、約 2.5 秒という短い競合ウィンドウ内で発生するため、Google のサービス・エージェントが当該モデルを使用する前に、攻撃者によるモデルの差し替えが可能になる。

Change log for the first fix. Source: GitHub.(source :  Unit 42)
Change log for the first fix. Source: GitHub.(source : Unit 42)

悪用に成功した攻撃者は、Vertex AI のサービング環境内で完全なリモート・コード実行が可能になる。Proof-of-Concept テストでは、攻撃者は以下を実行できた。

  • メタデータ・サーバからサービス・アカウント・トークンを抽出する。
  • 同一テナント環境に保存された、他のモデルへアクセスする。
  • BigQuery データセットと権限を列挙する。
  • クラウドログから内部インフラの詳細を収集する。

この手法により侵害された認証情報には、広範な cloud-platform スコープが付与されているため、攻撃の影響範囲は大きく拡大していた。

Palo Alto Networks Unit 42 の研究者によると、この脆弱性は SDK の “gcs_utils.py” モジュールにおけるステージング・ロジックに起因する。そこでは、前述のとおり、バケット名が予測可能な形で生成され、所有権の検証なしに存在の確認のみが行われていた。

この設計上の欠陥により、プロジェクトをまたいだリソースの悪用が可能となり、事実上、テナント間の分離が破られることになった。

修正と緩和策

Google は複数のアップデートを実施して、この問題に対処した。最初の修正では、UUID を用いてランダム化されたバケット命名が導入され、2 つ目のパッチでは明示的なバケット所有権検証が追加された。

2026年4月15日にリリースされたバージョン 1.148.0 で、これらの脆弱性は完全に解消された。

開発者には、以下の対応が強く推奨されている。

  • Google Cloud AI Platform バージョン 1.148.0 以降へアップグレードする。
  • デフォルトに依存せず、ステージング・バケットを明示的に定義する。
  • アップロードおよびデプロイのワークフローの中で、モデルの完全性を監視する。

この脆弱性は、Google の Vulnerability Reward Program を通じて報告され、深刻度は High と評価された。2026年3月に情報が開示された後に、Google は迅速に修正をデプロイした。

セキュリティ専門家が、この問題について指摘するのは、AI/ML パイプラインで生じる深刻なリスク例であるという点だ。このような環境では、従来のソフトウェア・コンポーネントではなく、モデル・アーティファクトを標的とする、サプライチェーン型の攻撃が発生し得る。

マネージド AI プラットフォームを使用する組織に推奨されるのは、ストレージ/アイデンティティ/モデル検証に関する、より厳格な制御を導入することで、同様の攻撃を防ぐことだ。