GCP - Cloudbuild Privesc

Support HackTricks

cloudbuild

Cloud Buildに関する詳細情報は次を確認してください:

cloudbuild.builds.create

この権限を使用すると、クラウドビルドを提出できます。cloudbuildマシンのファイルシステムには、デフォルトでcloudbuildサービスアカウントのトークンが含まれています:<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com。ただし、cloudbuild構成内でプロジェクト内の任意のサービスアカウントを指定できます。 したがって、マシンがトークンをあなたのサーバーに外部送信するか、その中でリバースシェルを取得してトークンを取得することができます(トークンを含むファイルは変更される可能性があります)。

元のエクスプロイトスクリプトはこちらのGitHubで見つけることができます(ただし、トークンを取得する場所は私には機能しませんでした)。したがって、脆弱な環境の作成、エクスプロイト、クリーンアップを自動化するスクリプトはこちらと、cloudbuildマシン内でリバースシェルを取得してそれを盗むためのPythonスクリプトはこちらを確認してください(コード内で他のサービスアカウントを指定する方法が見つかります)

より詳細な説明については、https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/を訪問してください。

cloudbuild.builds.update

潜在的にこの権限を使用すると、クラウドビルドを更新し、サービスアカウントトークンを盗むことができるでしょう。前の権限で行われたように(ただし、残念ながらこの執筆時点ではそのAPIを呼び出す方法が見つかりませんでした)。

TODO

cloudbuild.repositories.accessReadToken

この権限を持つユーザーは、リポジトリにアクセスするために使用される読み取りアクセス トークンを取得できます:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadToken"

cloudbuild.repositories.accessReadWriteToken

この権限を持つユーザーは、リポジトリにアクセスするために使用される読み取りおよび書き込みアクセストークンを取得できます:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadWriteToken"

cloudbuild.connections.fetchLinkableRepositories

この権限を使用すると、接続がアクセスできるリポジトリを取得できます:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>:fetchLinkableRepositories"
HackTricksをサポートする

Last updated