Pentesting Kubernetes Services
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kubernetes inatumia huduma kadhaa za mtandao maalum ambazo unaweza kupata zilizo wazi kwa Mtandao au katika mtandao wa ndani mara tu unaposhambulia pod moja.
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.
Inaweza kuwa muhimu kwako kuelewa jinsi Kubernetes inaweza kufichua huduma hadharani ili kuweza kuzitafuta:
Port zifuatazo zinaweza kuwa wazi katika klasta ya Kubernetes:
Port | Process | Description |
---|---|---|
Hii ni huduma ya API ya Kubernetes 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.
Angalia ukurasa ufuatao kujifunza jinsi ya kupata data nyeti na kutekeleza hatua nyeti ukizungumza na huduma hii:
Huduma hii inafanya kazi katika kila node ya klasta. Ni huduma ambayo itakuwa na udhibiti wa pods ndani ya node. Inazungumza na kube-apiserver.
Ikiwa utapata huduma hii imewekwa wazi huenda umepata RCE isiyo na uthibitisho.
Ikiwa jibu ni Unauthorized
basi inahitaji uthibitisho.
Ikiwa unaweza kuorodhesha nodi unaweza kupata orodha ya mwisho za kubelets kwa:
You could abuse this service to escalate privileges inside Kubernetes:
Huduma inayofaa kukusanya metriki.
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.
Upatikanaji wa bila jina kwa kube-apiserver API endpoints haukubaliwi. Lakini unaweza kuangalia baadhi ya endpoints:
ETCD inahifadhi siri za klasta, faili za usanidi na data nyeti zaidi. Kwa kawaida, ETCD haiwezi kufikiwa bila jina, lakini kila wakati ni vizuri kuangalia.
Ikiwa ETCD inaweza kufikiwa bila jina, unaweza kuhitaji kutumia etcdctl chombo. Amri ifuatayo itapata funguo zote zilizohifadhiwa:
The Kubelet documentation inaeleza kwamba kwa default 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:
Huduma ya Kubelet API haijandikwa, lakini msimbo wa chanzo unaweza kupatikana hapa na kupata ncha zilizofichwa ni rahisi kama kukimbia:
Yote yanaonekana kuwa ya kuvutia.
Unaweza kutumia chombo cha Kubeletctl kuingiliana na Kubelets na maeneo yao.
Huu ni mwisho unaoorodhesha pods na konteina zao:
Hii endpoint inaruhusu kutekeleza msimbo ndani ya kontena yoyote kwa urahisi:
Ili kuepuka shambulio hili, huduma ya kubelet inapaswa kuendeshwa na --anonymous-auth false
na huduma hiyo inapaswa kutengwa katika kiwango cha mtandao.
Wakati bandari ya kubelet ya kusoma tu inafichuliwa, inakuwa inawezekana kwa taarifa kutolewa kutoka kwa API na wahusika wasioidhinishwa. Kufichuliwa 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 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:
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)
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