Pentesting Kubernetes Services

Support HackTricks

Kubernetes कई विशिष्ट नेटवर्क सेवाओं का उपयोग करता है जिन्हें आप इंटरनेट पर या एक आंतरिक नेटवर्क में पा सकते हैं जब आप एक पॉड को समझौता कर लेते हैं

OSINT के साथ एक्सपोज़ किए गए पॉड्स को खोजना

एक तरीका Identity LIKE "k8s.%.com" को crt.sh में खोजने का हो सकता है ताकि kubernetes से संबंधित उपडोमेन मिल सकें। एक और तरीका "k8s.%.com" को github में खोजकर YAML फ़ाइलों में स्ट्रिंग खोजने का हो सकता है।

Kubernetes सेवाओं को कैसे एक्सपोज़ करता है

यह आपके लिए समझना उपयोगी हो सकता है कि Kubernetes कैसे सेवाओं को सार्वजनिक रूप से एक्सपोज़ कर सकता है ताकि आप उन्हें खोज सकें:

Exposing Services in Kubernetes

पोर्ट स्कैनिंग के माध्यम से एक्सपोज़ किए गए पॉड्स को खोजना

Kubernetes क्लस्टर में निम्नलिखित पोर्ट खुले हो सकते हैं:

PortProcessDescription

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

यह API Kubernetes सेवा है जिसके साथ प्रशासक आमतौर पर kubectl उपकरण का उपयोग करके बात करते हैं।

सामान्य पोर्ट: 6443 और 443, लेकिन मिनीक्यूब में 8443 और असुरक्षित के रूप में 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

संवेदनशील डेटा प्राप्त करने और इस सेवा से बात करके संवेदनशील क्रियाएँ करने के लिए निम्नलिखित पृष्ठ की जांच करें:

Kubernetes Enumeration

Kubelet API

यह सेवा क्लस्टर के हर नोड में चलती है। यह सेवा नोड के अंदर पॉड्स को नियंत्रित करेगी। यह kube-apiserver के साथ बात करती है।

यदि आप इस सेवा को उजागर पाते हैं, तो आप एक अनधिकृत RCE पा सकते हैं।

Kubelet API

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

यदि प्रतिक्रिया Unauthorized है, तो इसके लिए प्रमाणीकरण की आवश्यकता है।

यदि आप नोड्स की सूची बना सकते हैं, तो आप निम्नलिखित के साथ kubelets के एंडपॉइंट्स की सूची प्राप्त कर सकते हैं:

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 (केवल पढ़ने के लिए)

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

टिलर

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

आप इस सेवा का दुरुपयोग करके Kubernetes के अंदर विशेषाधिकार बढ़ा सकते हैं:

cAdvisor

मेट्रिक्स इकट्ठा करने के लिए उपयोगी सेवा।

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

NodePort

जब एक पोर्ट सभी नोड्स में NodePort के माध्यम से खोला जाता है, तो वही पोर्ट सभी नोड्स में खोला जाता है जो ट्रैफ़िक को घोषित Service में प्रॉक्सी करता है। डिफ़ॉल्ट रूप से, यह पोर्ट 30000-32767 की सीमा में होगा। इसलिए नए अनियंत्रित सेवाएँ उन पोर्ट्स के माध्यम से सुलभ हो सकती हैं।

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

Vulnerable Misconfigurations

Kube-apiserver Anonymous Access

Anonymous access to kube-apiserver API endpoints is not allowed. But you could check some endpoints:

ETCD Anonymous Access की जांच करना

The ETCD stores the cluster secrets, configuration files and more sensitive data. By default, the ETCD cannot be accessed anonymously, but it always good to check.

If the ETCD can be accessed anonymously, you may need to use the etcdctl tool. The following command will get all the keys stored:

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

Kubelet RCE

The Kubelet documentation यह बताता है कि डिफ़ॉल्ट रूप से गुमनाम पहुँच सेवा के लिए अनुमति दी गई है:

Kubelet सर्वर के लिए गुमनाम अनुरोधों को सक्षम करता है। अनुरोध जो किसी अन्य प्रमाणीकरण विधि द्वारा अस्वीकृत नहीं होते हैं, उन्हें गुमनाम अनुरोधों के रूप में माना जाता है। गुमनाम अनुरोधों का उपयोगकर्ता नाम system:anonymous है, और समूह का नाम system:unauthenticated है।

Kubelet API के प्रमाणीकरण और प्राधिकरण के काम करने के तरीके को बेहतर समझने के लिए इस पृष्ठ को देखें:

Kubelet Authentication & Authorization

Kubelet सेवा API का दस्तावेज़ नहीं है, लेकिन स्रोत कोड यहाँ पाया जा सकता है और उजागर किए गए एंडपॉइंट्स को चलाने के रूप में खोजना आसान है:

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

सभी दिलचस्प लगते हैं।

आप Kubeletctl टूल का उपयोग Kubelets और उनके एंडपॉइंट्स के साथ इंटरैक्ट करने के लिए कर सकते हैं।

/pods

यह एंडपॉइंट पॉड्स और उनके कंटेनरों की सूची देता है:

kubeletctl pods

/exec

यह एंडपॉइंट किसी भी कंटेनर के अंदर कोड को बहुत आसानी से निष्पादित करने की अनुमति देता है:

kubeletctl exec [command]

इस हमले से बचने के लिए kubelet सेवा को --anonymous-auth false के साथ चलाना चाहिए और सेवा को नेटवर्क स्तर पर अलग करना चाहिए।

Kubelet (पढ़ने के लिए केवल पोर्ट) जानकारी का प्रदर्शन जांचना

जब एक kubelet पढ़ने के लिए केवल पोर्ट को उजागर किया जाता है, तो अनधिकृत पक्षों द्वारा API से जानकारी प्राप्त करना संभव हो जाता है। इस पोर्ट का प्रदर्शन विभिन्न क्लस्टर कॉन्फ़िगरेशन तत्वों के प्रकटीकरण की संभावना को जन्म दे सकता है। हालांकि जानकारी, जिसमें पॉड नाम, आंतरिक फ़ाइलों के स्थान, और अन्य कॉन्फ़िगरेशन शामिल हैं, महत्वपूर्ण नहीं हो सकती, फिर भी इसका प्रदर्शन एक सुरक्षा जोखिम प्रस्तुत करता है और इससे बचना चाहिए।

इस भेद्यता का शोषण कैसे किया जा सकता है, इसका एक उदाहरण एक दूरस्थ हमलावर द्वारा एक विशिष्ट URL तक पहुंचना है। http://<external-IP>:10255/pods पर नेविगेट करके, हमलावर संभावित रूप से kubelet से संवेदनशील जानकारी प्राप्त कर सकता है:

संदर्भ

HackTricks का समर्थन करें

Last updated