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:
Port | Process | Description |
---|---|---|
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)