Pentesting Kubernetes Services
Last updated
Last updated
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.
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.
Može biti korisno da razumete kako Kubernetes može javno izložiti usluge kako biste ih pronašli:
Sledeći portovi mogu biti otvoreni u Kubernetes klasteru:
Port | Proces | Opis |
---|---|---|
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.
Proverite sledeću stranicu da biste saznali kako da dobijete osetljive podatke i izvršite osetljive radnje komunicirajući sa ovom uslugom:
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.
Ako je odgovor Unauthorized
, onda je potrebna autentikacija.
Ako možete da nabrojite čvorove, možete dobiti listu kubelet endpointa sa:
Možete zloupotrebiti ovu uslugu da biste eskalirali privilegije unutar Kubernetes-a:
Usluga korisna za prikupljanje metrika.
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.
Anoniman pristup kube-apiserver API endpointima nije dozvoljen. Međutim, možete proveriti neke endpointe:
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:
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 grupesystem:unauthenticated
.
Za bolje razumevanje kako autentifikacija i autorizacija Kubelet API-ja funkcionišu, pogledajte ovu stranicu:
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:
Možete koristiti alat Kubeletctl da biste komunicirali sa Kubeletima i njihovim endpointima.
Ovaj endpoint prikazuje podove i njihove kontejnere:
Ovaj endpoint omogućava izvršavanje koda unutar bilo kog kontejnera vrlo jednostavno:
Da biste izbegli ovaj napad, servis kubelet treba pokrenuti sa --anonymous-auth false
i servis treba izolovati na nivou mreže.
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:
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