Pentesting Kubernetes Services
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Kubernetes, İnternete açık veya bir pod’u ele geçirdiğinizde iç ağda bulabileceğiniz birkaç özel ağ hizmeti kullanır.
Açık pod’ları OSINT ile bulma
Bir yol, kubernetes ile ilgili alt alanları bulmak için crt.sh üzerinde Identity LIKE "k8s.%.com" araması yapmaktır. Diğer bir yol ise github’da "k8s.%.com" araması yaparak bu dizeyi içeren YAML dosyaları aramaktır.
Kubernetes’in Hizmetleri Nasıl Açtığını Anlamak
Kubernetes’in hizmetleri nasıl kamusal olarak açabileceğini anlamak, onları bulmak için faydalı olabilir:
Exposing Services in Kubernetes
Port taraması ile Açık pod’ları Bulma
Aşağıdaki portlar bir Kubernetes kümesinde açık olabilir:
| Port | Process | Açıklama |
|---|---|---|
| 443/TCP | kube-apiserver | Kubernetes API port |
| 2379/TCP | etcd | |
| 6666/TCP | etcd | etcd |
| 4194/TCP | cAdvisor | Konteyner metrikleri |
| 6443/TCP | kube-apiserver | Kubernetes API port |
| 8443/TCP | kube-apiserver | Minikube API port |
| 8080/TCP | kube-apiserver | Güvensiz API port |
| 10250/TCP | kubelet | Tam mod erişimine izin veren HTTPS API |
| 10255/TCP | kubelet | Kimlik doğrulaması yapılmamış salt okunur HTTP portu: pod’lar, çalışan pod’lar ve düğüm durumu |
| 10256/TCP | kube-proxy | Kube Proxy sağlık kontrol sunucusu |
| 9099/TCP | calico-felix | Calico için sağlık kontrol sunucusu |
| 6782-4/TCP | weave | Metrikler ve uç noktalar |
| 30000-32767/TCP | NodePort | Hizmetlere proxy |
| 44134/TCP | Tiller | Helm hizmeti dinliyor |
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
Bu, yöneticilerin genellikle kubectl aracını kullanarak iletişim kurduğu API Kubernetes servisidir.
Yaygın portlar: 6443 ve 443, ayrıca minikube’da 8443 ve güvensiz olarak 8080.
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
Bu hizmetle konuşarak hassas verileri nasıl elde edeceğinizi ve hassas eylemleri nasıl gerçekleştireceğinizi öğrenmek için aşağıdaki sayfayı kontrol edin:
Kubelet API
Bu hizmet kümenin her düğümünde çalışır. Düğüm içindeki pod’ları kontrol eden hizmettir. kube-apiserver ile iletişim kurar.
Bu hizmetin açık olduğunu bulursanız, kimlik doğrulaması yapılmamış RCE bulmuş olabilirsiniz.
Kubelet API
curl -k https://<IP address>:10250/metrics
curl -k https://<IP address>:10250/pods
Eğer yanıt Unauthorized ise, kimlik doğrulama gereklidir.
Eğer düğümleri listeleyebiliyorsanız, kubelet uç noktalarının bir listesini şu şekilde alabilirsiniz:
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 (Sadece okunur)
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
helm --host tiller-deploy.kube-system:44134 version
Bu hizmeti Kubernetes içinde ayrıcalıkları artırmak için kötüye kullanabilirsiniz:
cAdvisor
Metrikleri toplamak için yararlı bir hizmet.
curl -k https://<IP Address>:4194
NodePort
Bir port NodePort aracılığıyla tüm düğümlerde açıldığında, aynı port tüm düğümlerde açılır ve trafiği belirtilen Service’e yönlendirir. Varsayılan olarak bu port 30000-32767 aralığında olacaktır. Bu nedenle, yeni kontrol edilmemiş hizmetler bu portlar üzerinden erişilebilir olabilir.
sudo nmap -sS -p 30000-32767 <IP>
Güvenlik Açıkları
Kube-apiserver Anonim Erişim
kube-apiserver API uç noktalarına anonim erişim izin verilmez. Ancak bazı uç noktaları kontrol edebilirsiniz:

ETCD Anonim Erişimini Kontrol Etme
ETCD, küme gizli anahtarlarını, yapılandırma dosyalarını ve daha fazla hassas veriyi saklar. Varsayılan olarak, ETCD anonim olarak erişilemez, ancak kontrol etmek her zaman iyidir.
Eğer ETCD anonim olarak erişilebiliyorsa, şu aracı kullanmanız gerekebilir: etcdctl. Aşağıdaki komut, saklanan tüm anahtarları alacaktır:
etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only
Kubelet RCE
The Kubelet documentation açıklamaktadır ki varsayılan olarak anonim erişim hizmete izin verilmektedir:
Kubelet sunucusuna anonim istekleri etkinleştirir. Başka bir kimlik doğrulama yöntemi tarafından reddedilmeyen istekler anonim istekler olarak kabul edilir. Anonim isteklerin kullanıcı adı
system:anonymousve grup adısystem:unauthenticated’dır.
Kubelet API’sinin kimlik doğrulama ve yetkilendirme işlemlerinin nasıl çalıştığını daha iyi anlamak için bu sayfayı kontrol edin:
Kubelet Authentication & Authorization
Kubelet hizmetinin API’si belgelenmemiştir, ancak kaynak kodu burada bulunabilir ve maruz kalan uç noktaları bulmak çalıştırmak kadar kolaydır:
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/").
Hepsi ilginç görünüyor.
Kubeletler ve onların uç noktalarıyla etkileşimde bulunmak için Kubeletctl aracını kullanabilirsiniz.
/pods
Bu uç nokta pod’ları ve onların konteynerlerini listeler:
kubeletctl pods
/exec
Bu uç nokta, herhangi bir konteyner içinde kodu çok kolay bir şekilde çalıştırmaya olanak tanır:
kubeletctl exec [command]
Note
Bu saldırıyı önlemek için kubelet servisi
--anonymous-auth falseile çalıştırılmalı ve servis ağ düzeyinde ayrılmalıdır.
Kubelet (Salt Okuma Portu) Bilgi Sızıntısını Kontrol Etme
Bir kubelet salt okuma portu açıldığında, yetkisiz taraflar tarafından API’den bilgi alınması mümkün hale gelir. Bu portun açılması, çeşitli küme yapılandırma unsurlarının ifşasına yol açabilir. Pod isimleri, iç dosyaların konumları ve diğer yapılandırmalar gibi bilgiler kritik olmasa da, ifşası yine de bir güvenlik riski oluşturur ve kaçınılmalıdır.
Bu zafiyetin nasıl istismar edilebileceğine dair bir örnek, uzaktan bir saldırganın belirli bir URL’ye erişim sağlamasıdır. http://<external-IP>:10255/pods adresine giderek, saldırgan kubelet’ten hassas bilgileri potansiyel olarak alabilir:

Referanslar
Kubernetes Pentest Methodology Part 2
https://labs.f-secure.com/blog/attacking-kubernetes-through-kubelet
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

