GCP - Storage Privesc
ストレージ
基本情報:
pageGCP - Storage Enumstorage.objects.get
storage.objects.get
この権限により、Cloud Storage内に保存されているファイルをダウンロードすることができます。これにより、機密情報が保存されている場合に権限昇格が可能になることがあります。さらに、いくつかのGCPサービスは情報をバケットに保存します:
GCP Composer: Composer環境を作成すると、すべてのDAGのコードがバケット内に保存されます。これらのタスクには、コード内に興味深い情報が含まれている可能性があります。
GCR (Container Registry): コンテナのイメージはバケット内に保存されており、バケットを読むことができれば、イメージをダウンロードしてリークやソースコードを探すことができます。
storage.objects.setIamPolicy
storage.objects.setIamPolicy
このセクションの前のシナリオを悪用するための権限を自分に与えることができます。
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
この権限で権限を変更する例については、このページを確認してください:
pageGCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
Cloud Storageの「相互運用性」機能は、AWS S3などのクロスクラウドの相互作用に設計されており、サービスアカウントとユーザーのHMACキーを生成します。攻撃者は、権限の高いサービスアカウントのHMACキーを生成することで、Cloud Storage内での権限昇格を図ることができます。ユーザーに関連付けられたHMACキーはウェブコンソールを通じてのみ取得可能ですが、アクセスキーとシークレットキーは永続的にアクセス可能であり、潜在的なバックアップアクセスストレージのために利用できます。一方、サービスアカウントにリンクされたHMACキーはAPIを通じてアクセス可能ですが、作成後にアクセスキーとシークレットキーを取得することはできません。これは継続的なアクセスに複雑さを加えます。
この方法に関する別のエクスプロイトスクリプトはこちらで見つけることができます。
storage.objects.create
, storage.objects.delete
= ストレージ書き込み権限
storage.objects.create
, storage.objects.delete
= ストレージ書き込み権限バケット内に新しいオブジェクトを作成するためにはstorage.objects.create
が必要であり、ドキュメントによると、既存のオブジェクトを変更するためにはstorage.objects.delete
も必要です。
クラウド内で書き込み可能なバケットの一般的な悪用は、バケットがウェブサーバーのファイルを保存している場合で、ウェブアプリケーションによって使用される新しいコードを保存することができるかもしれません。
Composer
ComposerはGCP内で管理されているApache Airflowです。いくつかの興味深い特徴があります:
GKEクラスター内で実行されるため、Composer内で実行されるコードによってクラスターが使用するSAにアクセス可能です
コードをバケットに保存するため、そのバケットに対する書き込み権限を持つ任意の人がDGAコード(Apache Airflowが実行するコード)を変更/追加することができます そのため、Composerがコードを保存するために使用しているバケットに対する書き込み権限を持っている場合、GKEクラスターで実行中のSAに権限昇格することができます。
Cloud Functions
Cloud FunctionsのコードはStorageに保存されているため、それを上書きすることで任意のコードを実行することが可能です。
App Engine
App Engineのソースコードはバケットに保存されており、コードを上書きすることで任意のコードを実行する可能性があります。これは不可能です
コンテナレイヤーがバケットに保存されているようですが、これらを変更するかもしれません?
GCR
Google Container Registryはイメージをバケット内に保存しており、これらのバケットに書き込むことができれば、これらのバケットが実行されている場所に横断的に移動することができるかもしれません。
GCRが使用するバケットのURLは
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
のようになります(トップレベルのサブドメインはこちらで指定されています)。
参考文献
最終更新