GCP - Storage Privesc
Storage
基本情報:
GCP - 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
この権限での権限の変更方法については、次のページを確認してください:
GCP - 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クラスター内で実行されるため、クラスターが使用するSAはComposer内で実行されるコードからアクセス可能です。
コードをバケットに保存するため、そのバケットに書き込みアクセスを持つ誰でもDGAコード(Apache Airflowが実行するコード)を変更/追加できることになります。 そのため、Composerがコードを保存するバケットに書き込みアクセスがある場合、GKEクラスターで実行されているSAに権限昇格できます。
Cloud Functions
Cloud Functionsのコードはストレージに保存されているため、上書きすることで任意のコードを実行することが可能です。
App Engine
App Engineのソースコードはバケットに保存されており、コードを上書きすることで任意のコードを実行することが可能です。これは不可能です。
コンテナレイヤーがバケットに保存されているようです。これを変更することはできるでしょうか?
GCR
Google Container Registryはバケット内にイメージを保存しており、**これらのバケットに書き込むことができれば、それらのバケットが実行されている場所に横移動できる可能性があります。
GCRが使用するバケットのURLは
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
のようになります(トップレベルのサブドメインはこちらで指定されています)。
参考文献
Last updated