Pentesting Kubernetes Services
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kubernetes utilizza diversi servizi di rete specifici che potresti trovare esposti a Internet o in una rete interna una volta che hai compromesso un pod.
Un modo potrebbe essere cercare Identity LIKE "k8s.%.com"
in crt.sh per trovare sottodomini relativi a kubernetes. Un altro modo potrebbe essere cercare "k8s.%.com"
in github e cercare file YAML contenenti la stringa.
Potrebbe esserti utile capire come Kubernetes può esporre servizi pubblicamente per trovarli:
Exposing Services in KubernetesLe seguenti porte potrebbero essere aperte in un cluster Kubernetes:
443/TCP
kube-apiserver
Porta API di Kubernetes
2379/TCP
etcd
6666/TCP
etcd
etcd
4194/TCP
cAdvisor
Metriche del contenitore
6443/TCP
kube-apiserver
Porta API di Kubernetes
8443/TCP
kube-apiserver
Porta API di Minikube
8080/TCP
kube-apiserver
Porta API non sicura
10250/TCP
kubelet
API HTTPS che consente accesso in modalità completa
10255/TCP
kubelet
Porta HTTP di sola lettura non autenticata: pod, pod in esecuzione e stato del nodo
10256/TCP
kube-proxy
Server di controllo dello stato di Kube Proxy
9099/TCP
calico-felix
Server di controllo dello stato per Calico
6782-4/TCP
weave
Metriche e endpoint
30000-32767/TCP
NodePort
Proxy ai servizi
44134/TCP
Tiller
Servizio Helm in ascolto
Questo è il servizio API Kubernetes con cui gli amministratori comunicano solitamente utilizzando lo strumento kubectl
.
Porte comuni: 6443 e 443, ma anche 8443 in minikube e 8080 come non sicura.
Controlla la seguente pagina per imparare come ottenere dati sensibili e eseguire azioni sensibili parlando con questo servizio:
Kubernetes EnumerationQuesto servizio è in esecuzione in ogni nodo del cluster. È il servizio che controlla i pod all'interno del nodo. Comunica con il kube-apiserver.
Se trovi questo servizio esposto, potresti aver trovato un RCE non autenticato.
Se la risposta è Unauthorized
, allora è necessaria l'autenticazione.
Se puoi elencare i nodi, puoi ottenere un elenco degli endpoint dei kubelet con:
Potresti abusare di questo servizio per escalare i privilegi all'interno di Kubernetes:
Servizio utile per raccogliere metriche.
Quando una porta è esposta in tutti i nodi tramite un NodePort, la stessa porta è aperta in tutti i nodi, proiettando il traffico nel Service dichiarato. Per impostazione predefinita, questa porta sarà nell'intervallo 30000-32767. Quindi, nuovi servizi non controllati potrebbero essere accessibili tramite quelle porte.
L'accesso anonimo agli endpoint API kube-apiserver non è consentito. Ma puoi controllare alcuni endpoint:
L'ETCD memorizza i segreti del cluster, i file di configurazione e altri dati sensibili. Per default, l'ETCD non può essere accessibile anonimamente, ma è sempre bene controllare.
Se l'ETCD può essere accessibile anonimamente, potresti dover utilizzare il etcdctl strumento. Il seguente comando recupererà tutte le chiavi memorizzate:
La documentazione di Kubelet spiega che per default l'accesso anonimo al servizio è consentito:
Abilita richieste anonime al server Kubelet. Le richieste che non vengono rifiutate da un altro metodo di autenticazione sono trattate come richieste anonime. Le richieste anonime hanno un nome utente di
system:anonymous
e un nome di gruppo disystem:unauthenticated
Per comprendere meglio come funziona l'autenticazione e l'autorizzazione dell'API Kubelet, controlla questa pagina:
Kubelet Authentication & AuthorizationL'API del servizio Kubelet non è documentata, ma il codice sorgente può essere trovato qui e trovare gli endpoint esposti è facile come eseguire:
Tutti sembrano interessanti.
Puoi utilizzare lo strumento Kubeletctl per interagire con i Kubelet e i loro endpoint.
Questo endpoint elenca i pod e i loro contenitori:
Questo endpoint consente di eseguire codice all'interno di qualsiasi container molto facilmente:
Per evitare questo attacco, il servizio kubelet dovrebbe essere eseguito con --anonymous-auth false
e il servizio dovrebbe essere segregato a livello di rete.
Quando una porta di sola lettura del kubelet è esposta, diventa possibile per parti non autorizzate recuperare informazioni dall'API. L'esposizione di questa porta può portare alla divulgazione di vari elementi di configurazione del cluster. Sebbene le informazioni, inclusi nomi dei pod, posizioni di file interni e altre configurazioni, possano non essere critiche, la loro esposizione rappresenta comunque un rischio per la sicurezza e dovrebbe essere evitata.
Un esempio di come questa vulnerabilità possa essere sfruttata coinvolge un attaccante remoto che accede a un URL specifico. Navigando su http://<external-IP>:10255/pods
, l'attaccante può potenzialmente recuperare informazioni sensibili dal kubelet:
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)