GCP - Container & GKE Enum
Reading time: 5 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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Container
In GCP-Containern finden Sie die meisten containerbasierten Dienste, die GCP anbietet. Hier sehen Sie, wie Sie die häufigsten auflisten 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>
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 Aufzählung 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:
- https://www.4armed.com/blog/hacking-kubelet-on-gke/
- https://www.4armed.com/blog/kubeletmein-kubelet-hacking-tool/
- https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/
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 (Zertifikatsanfrage) 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
Selbst wenn die API keine Änderungen an Ressourcen erlaubt, könnte es möglich sein, sensible Informationen in der Antwort zu finden. Der Endpunkt /pods wurde mit Kiterunner gefunden.
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.