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 all'interno di essa e recuperare il token (il file contenente il token potrebbe cambiare).

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.builds.update

Potenzialmente con questo permesso sarai in grado di aggiornare un cloud build e semplicemente rubare il token dell'account di servizio come è stato fatto con il permesso precedente (ma sfortunatamente al momento della scrittura non sono riuscito a trovare alcun modo per chiamare quella API).

TODO

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