Pentesting Kubernetes Services

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Kubernetes koristi nekoliko specifičnih mrežnih servisa koje možda pronađete izložene Internetu ili u internoj mreži nakon što ste kompromitovali jedan pod.

Pronalaženje izloženih podova pomoću OSINT-a

Jedan način može biti pretraga Identity LIKE "k8s.%.com" na crt.sh kako biste pronašli poddomene povezane sa Kubernetes-om. Drugi način može biti pretraga "k8s.%.com" na github-u i traženje YAML fajlova koji sadrže taj string.

Kako Kubernetes Izlaže Usluge

Može biti korisno da razumete kako Kubernetes može javno izložiti usluge kako biste ih pronašli:

pageExposing Services in Kubernetes

Pronalaženje Izloženih podova putem skeniranja portova

Sledeći portovi mogu biti otvoreni u Kubernetes klasteru:

PortProcesOpis

443/TCP

kube-apiserver

Port Kubernetes API-a

2379/TCP

etcd

6666/TCP

etcd

etcd

4194/TCP

cAdvisor

Metrike kontejnera

6443/TCP

kube-apiserver

Port Kubernetes API-a

8443/TCP

kube-apiserver

Minikube API port

8080/TCP

kube-apiserver

Nesiguran API port

10250/TCP

kubelet

HTTPS API koji omogućava pun pristup

10255/TCP

kubelet

Neautentifikovani samo-čitajući HTTP port: podovi, pokrenuti podovi i stanje čvora

10256/TCP

kube-proxy

Kube Proxy server za proveru zdravlja

9099/TCP

calico-felix

Server za proveru zdravlja za Calico

6782-4/TCP

weave

Metrike i endpointi

30000-32767/TCP

NodePort

Proxy ka uslugama

44134/TCP

Tiller

Helm servis koji osluškuje

Nmap

nmap -n -T4 -p 443,2379,6666,4194,6443,8443,8080,10250,10255,10256,9099,6782-6784,30000-32767,44134 <pod_ipaddress>/16

Kube-apiserver

Ovo je API Kubernetes servis sa kojim administratori obično komuniciraju koristeći alat kubectl.

Uobičajeni portovi: 6443 i 443, ali i 8443 u minikube-u i 8080 kao nesiguran.

curl -k https://<IP Address>:(8|6)443/swaggerapi
curl -k https://<IP Address>:(8|6)443/healthz
curl -k https://<IP Address>:(8|6)443/api/v1

Proverite sledeću stranicu da biste saznali kako da dobijete osetljive podatke i izvršite osetljive radnje komunicirajući sa ovom uslugom:

pageKubernetes Enumeration

Kubelet API

Ova usluga radi na svakom čvoru klastera. To je usluga koja će kontrolisati podove unutar čvora. Komunicira sa kube-apiserverom.

Ako pronađete ovu uslugu izloženu, možda ste pronašli neovlašćeni RCE.

Kubelet API

curl -k https://<IP address>:10250/metrics
curl -k https://<IP address>:10250/pods

Ako je odgovor Unauthorized, onda je potrebna autentikacija.

Ako možete da nabrojite čvorove, možete dobiti listu kubelet endpointa sa:

kubectl get nodes -o custom-columns='IP:.status.addresses[0].address,KUBELET_PORT:.status.daemonEndpoints.kubeletEndpoint.Port' | grep -v KUBELET_PORT | while IFS='' read -r node; do
ip=$(echo $node | awk '{print $1}')
port=$(echo $node | awk '{print $2}')
echo "curl -k --max-time 30 https://$ip:$port/pods"
echo "curl -k --max-time 30 https://$ip:2379/version" #Check  also for etcd
done

kubelet (Samo čitanje)

curl -k https://<IP Address>:10255
http://<external-IP>:10255/pods

etcd API

curl -k https://<IP address>:2379
curl -k https://<IP address>:2379/version
etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only

Tiler

helm --host tiller-deploy.kube-system:44134 version

Možete zloupotrebiti ovu uslugu da biste eskalirali privilegije unutar Kubernetes-a:

cAdvisor

Usluga korisna za prikupljanje metrika.

curl -k https://<IP Address>:4194

NodePort

Kada je port izložen na svim čvorovima putem NodePort, isti port je otvoren na svim čvorovima koji prosleđuju saobraćaj u deklarisani Service. Podrazumevano, ovaj port će biti u opsegu 30000-32767. Dakle, novi neprovereni servisi mogu biti dostupni preko tih portova.

sudo nmap -sS -p 30000-32767 <IP>

Ranjive nesigurnosti

Pristup anonimnom pristupu kube-apiserver API endpointima

Anoniman pristup kube-apiserver API endpointima nije dozvoljen. Međutim, možete proveriti neke endpointe:

Provera anonimnog pristupa ETCD-u

ETCD čuva tajne klastera, konfiguracione datoteke i više osetljivih podataka. Podrazumevano, ETCD ne može biti pristupljen anonimno, ali uvek je dobro proveriti.

Ako se ETCD može pristupiti anonimno, možda će vam biti potrebno koristiti etcdctl alat. Sledeća komanda će dohvatiti sve sačuvane ključeve:

etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only

Kubelet RCE

Dokumentacija za Kubelet objašnjava da je podrazumevano dozvoljen anoniman pristup servisu:

Omogućava anonimne zahteve ka Kubelet serveru. Zahtevi koji nisu odbijeni drugim metodama autentifikacije tretiraju se kao anonimni zahtevi. Anonimni zahtevi imaju korisničko ime system:anonymous, i ime grupe system:unauthenticated.

Za bolje razumevanje kako autentifikacija i autorizacija Kubelet API-ja funkcionišu, pogledajte ovu stranicu:

pageKubelet Authentication & Authorization

API servisa Kubelet nije dokumentovan, ali izvorni kod može se pronaći ovde, a pronalaženje izloženih tačaka je jednostavno kao pokretanje:

curl -s https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/server/server.go | grep 'Path("/'

Path("/pods").
Path("/run")
Path("/exec")
Path("/attach")
Path("/portForward")
Path("/containerLogs")
Path("/runningpods/").

Možete koristiti alat Kubeletctl da biste komunicirali sa Kubeletima i njihovim endpointima.

/pods

Ovaj endpoint prikazuje podove i njihove kontejnere:

kubeletctl pods

/exec

Ovaj endpoint omogućava izvršavanje koda unutar bilo kog kontejnera vrlo jednostavno:

kubeletctl exec [command]

Da biste izbegli ovaj napad, servis kubelet treba pokrenuti sa --anonymous-auth false i servis treba izolovati na nivou mreže.

Provera Izloženih Informacija o Kubeletu (Samo za čitanje)

Kada je kubelet read-only port izložen, postaje moguće da neovlašćene strane povuku informacije sa API-ja. Izloženost ovog porta može dovesti do otkrivanja različitih elemenata konfiguracije klastera. Iako informacije, uključujući imena podova, lokacije internih fajlova i druge konfiguracije, možda nisu kritične, njihova izloženost ipak predstavlja sigurnosni rizik i treba je izbeći.

Primer kako ova ranjivost može biti iskorišćena uključuje udaljenog napadača koji pristupa određenom URL-u. Navigiranjem na http://<external-IP>:10255/pods, napadač potencijalno može povući osetljive informacije sa kubeleta:

Reference

Naučite hakovanje AWS-a od početnika do stručnjaka sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated