GCP - Containers & GKE Enum

Unterstützen Sie HackTricks

Container

In GCP-Containern finden Sie die meisten containerbasierten Dienste, die GCP anbietet. Hier erfahren Sie, wie Sie die häufigsten aufzählen können:

gcloud container images list
gcloud container images list --repository us.gcr.io/<project-name> #Search in other subdomains repositories
gcloud container images describe <name>
gcloud container subnets list-usable
gcloud container clusters list
gcloud container clusters describe <name>
gcloud container clusters get-credentials [NAME]

# Run a container locally
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh

# Login & Download
sudo docker login -u oauth2accesstoken -p $(gcloud auth print-access-token) https://HOSTNAME
## where HOSTNAME is gcr.io, us.gcr.io, eu.gcr.io, or asia.gcr.io.
sudo docker pull HOSTNAME/<project-name>/<image-name>

Privilege Escalation

Auf der folgenden Seite können Sie nachschauen, wie Sie Container-Berechtigungen missbrauchen, um Privilegien zu eskalieren:

GCP - Container Privesc

Knotenpools

Dies sind die Gruppe von Maschinen (Knoten), die die Kubernetes-Cluster bilden.

# Pool of machines used by the cluster
gcloud container node-pools list --zone <zone> --cluster <cluster>
gcloud container node-pools describe --cluster <cluster> --zone <zone> <node-pool>

Kubernetes

Für Informationen darüber, was Kubernetes ist, besuchen Sie diese Seite:

Kubernetes Pentesting

Zunächst können Sie überprüfen, ob in Ihrem Projekt Kubernetes-Cluster vorhanden sind.

gcloud container clusters list

Wenn Sie einen Cluster haben, kann gcloud automatisch Ihre ~/.kube/config-Datei konfigurieren. Diese Datei wird verwendet, um Sie zu authentifizieren, wenn Sie kubectl verwenden, das native CLI zur Interaktion mit K8s-Clustern. Versuchen Sie diesen Befehl.

gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]

Dann schauen Sie sich die Datei ~/.kube/config an, um die generierten Anmeldeinformationen zu sehen. Diese Datei wird verwendet, um Zugriffstoken automatisch zu aktualisieren, basierend auf der gleichen Identität, die Ihre aktive gcloud-Sitzung verwendet. Dies erfordert natürlich die korrekten Berechtigungen.

Sobald dies eingerichtet ist, können Sie den folgenden Befehl ausprobieren, um die Clusterkonfiguration zu erhalten.

kubectl cluster-info

Du kannst mehr über gcloud für Container hier nachlesen.

Dies ist ein einfaches Skript zur Auflistung von Kubernetes in GCP: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

TLS-Bootstrap-Privileg-Eskalation

Ursprünglich ermöglichte diese Eskalationstechnik es, Privilegien innerhalb des GKE-Clusters zu eskalieren, was einem Angreifer effektiv erlaubte, ihn vollständig zu kompromittieren.

Dies liegt daran, dass GKE TLS-Bootstrap-Anmeldeinformationen in den Metadaten bereitstellt, die von jedem zugänglich sind, der einfach einen Pod kompromittiert.

Die verwendete Technik wird in den folgenden Beiträgen erläutert:

Und dieses Tool wurde erstellt, um den Prozess zu automatisieren: https://github.com/4ARMED/kubeletmein

Allerdings missbrauchte die Technik die Tatsache, dass es mit den Metadaten-Anmeldeinformationen möglich war, einen CSR (Certificate Signing Request) für einen neuen Knoten zu generieren, der automatisch genehmigt wurde. In meinem Test habe ich festgestellt, dass diese Anfragen nicht mehr automatisch genehmigt werden, daher bin ich mir nicht sicher, ob diese Technik noch gültig ist.

Geheimnisse im Kubelet-API

In diesem Beitrag wurde entdeckt, dass eine Kubelet-API-Adresse von innerhalb eines Pods in GKE aus zugänglich ist und Details zu den ausgeführten Pods liefert:

curl -v -k http://10.124.200.1:10255/pods

Auch wenn die API keine Änderung von Ressourcen zulässt, könnte es möglich sein, sensible Informationen in der Antwort zu finden. Der Endpunkt /pods wurde mithilfe von Kiterunner gefunden.

Unterstützen Sie HackTricks

Last updated