GCP - Containers & GKE Enum

Support HackTricks

Container

In GCP-Containern findest du die meisten der containerbasierten Dienste, die GCP anbietet. Hier siehst du, wie du die häufigsten auflisten kannst:

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>

Privesc

Auf der folgenden Seite können Sie überprüfen, wie Sie Containerberechtigungen missbrauchen, um Privilegien zu eskalieren:

Node Pools

Dies sind die Maschinenpools (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, siehe diese Seite:

Zuerst 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, die 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 basierend auf derselben Identität zu aktualisieren, die Ihre aktive gcloud-Sitzung verwendet. Dies erfordert natürlich die richtigen Berechtigungen.

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

kubectl cluster-info

Sie können mehr über gcloud für Container hier lesen.

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

TLS Bootstrap Privilegieneskalation

Ursprünglich erlaubte diese Privilegieneskalationstechnik, sich innerhalb des GKE-Clusters zu privescen, was einem Angreifer effektiv ermöglichte, es vollständig zu kompromittieren.

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

Die verwendete Technik wird in den folgenden Beiträgen erklärt:

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

Die Technik missbrauchte jedoch die Tatsache, dass mit den Metadatenanmeldeinformationen es möglich war, eine CSR (Zertifikatsantrag) für einen neuen Knoten zu generieren, die automatisch genehmigt wurde. In meinem Test habe ich überprüft, dass diese Anfragen nicht mehr automatisch genehmigt werden, daher bin ich mir nicht sicher, ob diese Technik noch gültig ist.

Geheimnisse in der Kubelet-API

In diesem Beitrag wurde eine Kubelet-API-Adresse entdeckt, die von innerhalb eines Pods in GKE zugänglich ist und die Details der laufenden Pods bereitstellt:

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

Auch wenn die API nicht erlaubt, Ressourcen zu modifizieren, könnte es möglich sein, sensible Informationen in der Antwort zu finden. Der Endpunkt /pods wurde mit Kiterunner gefunden.

Support HackTricks

Last updated