GCP Composer の RCE 脆弱性が FIX:依存関係を撹乱させる CloudImposer とは?

Google Fixes GCP Composer Flaw That Could’ve Led to Remote Code Execution

2024/09/16 TheHackerNews — Google Cloud Platform (GCP) Composer に発見された深刻なセキュリティ脆弱性は、サプライチェーン攻撃の手法である “Dependency Confusion” (依存関係かく乱) により、クラウド・サーバ上でのリモート・コード実行を攻撃者に許すものだ。この脆弱性には、 CloudImposer というコードネームが、Tenable Research により付けられている。Tenable のセキュリティ研究者である Liv Matan は、「この脆弱性の悪用に成功した攻撃者は、Google Cloud Composer の各パイプライン・オーケストレーション・ツールにあらかじめインストールされている、内部ソフトウェアの依存関係を乗っ取りが可能になると推測される」と説明している。


“Dependency Confusion” (依存関係かく乱) とは、”Substitution Attack” (置換攻撃) とも呼ばれる、ソフトウェア・サプライチェーン侵害の一種であり、2021年2月にセキュリティ研究者の Alex Birsan により初めて文書化されたものだ。この手法について具体的に説明すると、意図する内部リポジトリのファイルではなく、公開リポジトリから悪意のパッケージがダウンロードされるよう、パッケージ・マネージャーが誘導されるものとなる。

つまり、企業が社内で開発したパッケージと同じ名前を持つ、上位のバージョン番号を持つ偽のパッケージを、パブリックなパッケージ・リポジトリに公開する攻撃者が、大規模なサプライチェーン攻撃を仕掛ける可能性が生じる。

このシナリオに騙されたパッケージ・マネージャーは、プライベート・リポジトリではなくパブリック・リポジトリから悪意のパッケージをダウンロードし、既存のパッケージ依存関係の中に不正なパッケージに置き換えてしまう。

Tenable が特定した GCP の脆弱性も、上記のシナリオに沿ったものである。この脆弱性が悪用されると、まずは “google-cloud-datacatalog-lineage-producer-client” という悪意のパッケージが、Python Package Index (PyPI) リポジトリにアップロードされる。したがって、すべての Composer インスタンスに対して、昇格した権限を持つ攻撃者により、悪意のパッケージがプリインストールされる可能性が生じる。

Cloud Composer では、対象となるパッケージのバージョンが、たとえば “バージョン 0.1.0” などに固定されている必要がある。しかし、Tenable が発見したのは “pip install” コマンドで “–extra-index-url” 引数を使用すると、パブリック・レジストリからのパッケージ取得が優先され、依存関係の混乱につながることである。

この特権の悪用に成功した攻撃者は、コードを実行してサービス・アカウントの認証情報を盗み出し、被害者の環境内に存在する他の GCP サービスへの横移動が可能になる。

この脆弱性は、2024年1月18日に情報開示された後に、2024年5月に Google により修正され、パッケージのインストールはプライベート・リポジトリからのみ行われるように改善されている。また、パッケージの完全性を確認し、改竄されていないことを検証するために、パッケージのチェックサムを検証するという、追加の予防策も追加された。

Python Packaging Authority (PyPA) は、遅くとも 2018年3月から、”–extra-index-url” 引数によりもたらされるリスクを認識しており、内部パッケージをプルする必要がある場合には、PyPI の使用をスキップするようユーザーに促していた。

PyPA のメンバーは、「パッケージは名前とバージョンまでがユニークであることが期待されているため、同じパッケージ名とバージョンの2つのパッケージは pip により区別できないものとして扱われる。それは、パッケージ・メタデータの意図的な機能であり、おそらく変更されることはないだろう」と、この情報が公開された時点で指摘していた

Google が、その修正の一環として開発者たちに推奨するのは、”–extra-index-url” 引数の代わりに “–index-url” 引数を使用することである。また、GCP のユーザーに対しては、複数のリポジトリが必要な場合において、アーティファクト・レジストリの仮想リポジトリを使用することを推奨している。

Liv Matan は、「”–index-url” 引数は、その引数に与えられた値として、定義されたレジストリ内のパッケージのみを検索する。したがって、依存関係の混乱を狙った攻撃のリスクは低減される」と述べている。