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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
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:
Port | Process | Description |
---|---|---|
443/TCP | kube-apiserver | Kubernetes API port |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | Container metrics |
6443/TCP | kube-apiserver | Kubernetes API port |
8443/TCP | kube-apiserver | Minikube API port |
8080/TCP | kube-apiserver | Insecure API port |
10250/TCP | kubelet | HTTPS API which allows full mode access |
10255/TCP | kubelet | Unauthenticated read-only HTTP port: pods, running pods and node state |
10256/TCP | kube-proxy | Kube Proxy health check server |
9099/TCP | calico-felix | Health check server for Calico |
6782-4/TCP | weave | Metrics and endpoints |
30000-32767/TCP | NodePort | Proxy to the services |
44134/TCP | Tiller | Helm service listening |
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
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.
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:
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
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:
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)
curl -k https://<IP Address>:10255
http://<external-IP>:10255/pods
etсd 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
helm --host tiller-deploy.kube-system:44134 version
Unaweza kutumia huduma hii kuboresha mamlaka ndani ya Kubernetes:
cAdvisor
Huduma inayofaa kukusanya metriki.
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.
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:
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 kundisystem: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:
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:
kubeletctl pods
/exec
Hii endpoint inaruhusu kutekeleza msimbo ndani ya kontena yoyote kwa urahisi sana:
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:
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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.