Pentesting Kubernetes Services
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kubernetes verwendet mehrere spezifische Netzwerkdienste, die Sie möglicherweise im Internet exponiert oder in einem internen Netzwerk finden, sobald Sie einen Pod kompromittiert haben.
Eine Möglichkeit könnte sein, nach Identity LIKE "k8s.%.com"
in crt.sh zu suchen, um Subdomains zu finden, die mit Kubernetes in Verbindung stehen. Eine andere Möglichkeit könnte sein, nach "k8s.%.com"
in GitHub zu suchen und nach YAML-Dateien zu suchen, die die Zeichenfolge enthalten.
Es könnte nützlich für Sie sein, zu verstehen, wie Kubernetes Dienste öffentlich exponieren kann, um sie zu finden:
Die folgenden Ports könnten in einem Kubernetes-Cluster offen sein:
443/TCP
kube-apiserver
Kubernetes API-Port
2379/TCP
etcd
6666/TCP
etcd
etcd
4194/TCP
cAdvisor
Container-Metriken
6443/TCP
kube-apiserver
Kubernetes API-Port
8443/TCP
kube-apiserver
Minikube API-Port
8080/TCP
kube-apiserver
Unsicherer API-Port
10250/TCP
kubelet
HTTPS-API, die vollen Moduszugriff ermöglicht
10255/TCP
kubelet
Unauthentifizierter schreibgeschützter HTTP-Port: Pods, laufende Pods und Knotenstatus
10256/TCP
kube-proxy
Kube Proxy-Health-Check-Server
9099/TCP
calico-felix
Health-Check-Server für Calico
6782-4/TCP
weave
Metriken und Endpunkte
30000-32767/TCP
NodePort
Proxy zu den Diensten
44134/TCP
Tiller
Helm-Dienst, der lauscht
Dies ist der API Kubernetes-Dienst, mit dem die Administratoren normalerweise über das Tool kubectl
kommunizieren.
Häufige Ports: 6443 und 443, aber auch 8443 in minikube und 8080 als unsicher.
Überprüfen Sie die folgende Seite, um zu erfahren, wie Sie sensible Daten erhalten und sensible Aktionen mit diesem Dienst durchführen können:
Dieser Dienst läuft auf jedem Knoten des Clusters. Es ist der Dienst, der die Pods innerhalb des Knotens steuert. Er kommuniziert mit dem kube-apiserver.
Wenn Sie diesen Dienst exponiert finden, haben Sie möglicherweise eine unauthentifizierte RCE gefunden.
Wenn die Antwort Unauthorized
ist, erfordert dies eine Authentifizierung.
Wenn Sie Knoten auflisten können, können Sie eine Liste der Kubelet-Endpunkte mit folgendem Befehl erhalten:
You could abuse this service to escalate privileges inside Kubernetes:
Dienst, der nützlich ist, um Metriken zu sammeln.
Wenn ein Port in allen Knoten über einen NodePort freigegeben wird, wird derselbe Port in allen Knoten geöffnet, um den Verkehr in den deklarierten Service zu proxifizieren. Standardmäßig liegt dieser Port im Bereich 30000-32767. Daher könnten neue, nicht überprüfte Dienste über diese Ports zugänglich sein.
Anonymer Zugriff auf kube-apiserver API-Endpunkte ist nicht erlaubt. Aber Sie könnten einige Endpunkte überprüfen:
Der ETCD speichert die Cluster-Geheimnisse, Konfigurationsdateien und weitere sensible Daten. Standardmäßig kann der ETCD nicht anonym zugegriffen werden, aber es ist immer gut, dies zu überprüfen.
Wenn der ETCD anonym zugänglich ist, müssen Sie möglicherweise das etcdctl Tool verwenden. Der folgende Befehl wird alle gespeicherten Schlüssel abrufen:
Die Kubelet-Dokumentation erklärt, dass standardmäßig anonymer Zugriff auf den Dienst erlaubt ist:
Ermöglicht anonyme Anfragen an den Kubelet-Server. Anfragen, die von einer anderen Authentifizierungsmethode nicht abgelehnt werden, werden als anonyme Anfragen behandelt. Anonyme Anfragen haben einen Benutzernamen von
system:anonymous
und einen Gruppennamen vonsystem:unauthenticated
.
Um besser zu verstehen, wie die Authentifizierung und Autorisierung der Kubelet-API funktioniert, besuche diese Seite:
Die Kubelet-Dienst-API ist nicht dokumentiert, aber der Quellcode kann hier gefunden werden und das Finden der exponierten Endpunkte ist so einfach wie auszuführen:
Alle klingen interessant.
Sie können das Kubeletctl Tool verwenden, um mit Kubelets und ihren Endpunkten zu interagieren.
Dieser Endpunkt listet Pods und ihre Container auf:
Dieser Endpunkt ermöglicht es, Code sehr einfach innerhalb eines Containers auszuführen:
Um diesen Angriff zu vermeiden, sollte der kubelet Dienst mit --anonymous-auth false
ausgeführt werden, und der Dienst sollte auf Netzwerkebene segregiert werden.
Wenn ein kubelet Nur-Lese-Port freigegeben ist, wird es unbefugten Parteien möglich, Informationen über die API abzurufen. Die Freigabe dieses Ports kann zur Offenlegung verschiedener Cluster-Konfigurationselemente führen. Obwohl die Informationen, einschließlich Pod-Namen, Standorte interner Dateien und anderer Konfigurationen, möglicherweise nicht kritisch sind, stellt ihre Freigabe dennoch ein Sicherheitsrisiko dar und sollte vermieden werden.
Ein Beispiel dafür, wie diese Schwachstelle ausgenutzt werden kann, besteht darin, dass ein Angreifer aus der Ferne auf eine bestimmte URL zugreift. Durch das Navigieren zu http://<external-IP>:10255/pods
kann der Angreifer potenziell sensible Informationen vom Kubelet abrufen:
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)