Pentesting Kubernetes Services

Reading time: 8 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Kubernetes inatumia huduma maalum za mtandao ambazo unaweza kupata zilizo wazi kwa Mtandao au katika mtandao wa ndani mara tu unaposhambulia pod moja.

Kutafuta pods zilizo wazi kwa OSINT

Njia moja inaweza kuwa kutafuta Identity LIKE "k8s.%.com" katika crt.sh ili kupata subdomains zinazohusiana na kubernetes. Njia nyingine inaweza kuwa kutafuta "k8s.%.com" katika github na kutafuta faili za YAML zinazokuwa na string hiyo.

Jinsi Kubernetes Inavyofichua Huduma

Inaweza kuwa na manufaa kwako kuelewa jinsi Kubernetes inaweza kufichua huduma hadharani ili kuweza kuzitafuta:

Exposing Services in Kubernetes

Kutafuta pods zilizo wazi kupitia skanning ya port

Ports zifuatazo zinaweza kuwa wazi katika klasta ya Kubernetes:

PortProcessDescription
443/TCPkube-apiserverKubernetes API port
2379/TCPetcd
6666/TCPetcdetcd
4194/TCPcAdvisorContainer metrics
6443/TCPkube-apiserverKubernetes API port
8443/TCPkube-apiserverMinikube API port
8080/TCPkube-apiserverInsecure API port
10250/TCPkubeletHTTPS API which allows full mode access
10255/TCPkubeletUnauthenticated read-only HTTP port: pods, running pods and node state
10256/TCPkube-proxyKube Proxy health check server
9099/TCPcalico-felixHealth check server for Calico
6782-4/TCPweaveMetrics and endpoints
30000-32767/TCPNodePortProxy to the services
44134/TCPTillerHelm service listening

Nmap

bash
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

Hii ni API Kubernetes service ambayo wasimamizi huwasiliana nayo mara nyingi wakitumia chombo kubectl.

Bandari za kawaida: 6443 na 443, lakini pia 8443 katika minikube na 8080 kama isiyo salama.

bash
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

Angalia ukurasa ufuatao kujifunza jinsi ya kupata data nyeti na kutekeleza vitendo nyeti ukizungumza na huduma hii:

Kubernetes Enumeration

Kubelet API

Huduma hii inafanya kazi katika kila nodi ya klasta. Ni huduma ambayo itakuwa na udhibiti wa pods ndani ya nodi. Inazungumza na kube-apiserver.

Ikiwa utapata huduma hii imewekwa wazi huenda umepata RCE isiyo na uthibitisho.

Kubelet API

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

Ikiwa jibu ni Unauthorized basi inahitaji uthibitisho.

Ikiwa unaweza kuorodhesha nodi unaweza kupata orodha ya mwisho za kubelets kwa:

bash
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 (Soma tu)

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

etсd API

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

Tiller

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

Unaweza kutumia huduma hii kuboresha mamlaka ndani ya Kubernetes:

cAdvisor

Huduma inayofaa kukusanya metriki.

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

NodePort

Wakati bandari inafichuliwa katika nodi zote kupitia NodePort, bandari hiyo hiyo inafunguliwa katika nodi zote ikipitia trafiki kwenye Service iliyotangazwa. Kwa default, bandari hii itakuwa katika range 30000-32767. Hivyo, huduma mpya zisizokaguliwa zinaweza kupatikana kupitia bandari hizo.

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

Uwekaji Mbaya wa Usalama

Kube-apiserver Ufikiaji wa Kijanja

Ufikiaji wa kijanja kwa kube-apiserver API endpoints haukubaliwi. Lakini unaweza kuangalia baadhi ya endpoints:

Kuangalia Ufikiaji wa Kijanja wa ETCD

ETCD inahifadhi siri za klasta, faili za usanidi na data nyeti zaidi. Kwa kawaida, ETCD haiwezi kufikiwa kijanja, lakini ni vyema kuangalia.

Ikiwa ETCD inaweza kufikiwa kijanja, unaweza kuhitaji kutumia etcdctl chombo. Amri ifuatayo itapata funguo zote zilizohifadhiwa:

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

Kubelet RCE

The Kubelet documentation inaeleza kwamba kwa kawaida ufikiaji wa kutotambulika kwa huduma unaruhusiwa:

Inaruhusu maombi ya kutotambulika kwa seva ya Kubelet. Maombi ambayo hayakukataliwa na njia nyingine ya uthibitishaji yanachukuliwa kama maombi ya kutotambulika. Maombi ya kutotambulika yana jina la mtumiaji system:anonymous, na jina la kundi system:unauthenticated

Ili kuelewa vizuri jinsi uthibitishaji na idhini ya Kubelet API inavyofanya kazi, angalia ukurasa huu:

Kubelet Authentication & Authorization

Huduma ya Kubelet API haijaandikwa, lakini msimbo wa chanzo unaweza kupatikana hapa na kupata mwisho ulio wazi ni rahisi kama kukimbia:

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

Zote zinavutia.

Unaweza kutumia zana ya Kubeletctl kuingiliana na Kubelets na maeneo yao ya mwisho.

/pods

Huu ni mwisho unaoorodhesha pods na konteina zao:

bash
kubeletctl pods

/exec

Hii endpoint inaruhusu kutekeleza msimbo ndani ya kontena yoyote kwa urahisi sana:

bash
kubeletctl exec [command]

note

Ili kuepuka shambulio hili, huduma ya kubelet inapaswa kuendeshwa na --anonymous-auth false na huduma hiyo inapaswa kutengwa katika kiwango cha mtandao.

Kuangalia Kuwekwa kwa Taarifa za Kubelet (Bandari ya Kusoma Tu)

Wakati bandari ya kubelet ya kusoma tu inafichuliwa, inakuwa inawezekana kwa taarifa kutolewa kutoka kwa API na wahusika wasioidhinishwa. Kuwekwa kwa bandari hii kunaweza kusababisha kufichuliwa kwa vipengele mbalimbali vya mipangilio ya klasta. Ingawa taarifa, ikiwa ni pamoja na majina ya pod, maeneo ya faili za ndani, na mipangilio mingine, inaweza isiwe ya muhimu, kufichuliwa kwake bado kunaweka hatari ya usalama na inapaswa kuepukwa.

Mfano wa jinsi udhaifu huu unaweza kutumika ni pamoja na mshambuliaji wa mbali kufikia URL maalum. Kwa kuingia kwenye http://<external-IP>:10255/pods, mshambuliaji anaweza kupata taarifa nyeti kutoka kwa kubelet:

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

Marejeleo

Kubernetes Pentest Methodology Part 2

Threats & Research Archives - F-Secure Blog

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks