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 कई विशिष्ट नेटवर्क सेवाओं का उपयोग करता है जो आपको इंटरनेट पर या एक आंतरिक नेटवर्क में मिल सकती हैं जब आप एक पॉड को समझौता कर लेते हैं।
एक तरीका Identity LIKE "k8s.%.com"
को crt.sh में खोजने का हो सकता है ताकि kubernetes से संबंधित उपडोमेन मिल सकें। एक और तरीका "k8s.%.com"
को github में खोजने और YAML फ़ाइलों में स्ट्रिंग खोजने का हो सकता है।
यह आपके लिए समझना उपयोगी हो सकता है कि Kubernetes कैसे सेवाओं को सार्वजनिक रूप से एक्सपोज़ कर सकता है ताकि आप उन्हें खोज सकें:
Exposing Services in KubernetesKubernetes क्लस्टर में निम्नलिखित पोर्ट खुले हो सकते हैं:
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 |
यह API Kubernetes सेवा है जिसके साथ प्रशासक आमतौर पर kubectl
उपकरण का उपयोग करके बात करते हैं।
सामान्य पोर्ट: 6443 और 443, लेकिन मिनीक्यूब में 8443 और असुरक्षित के रूप में 8080 भी।
संवेदनशील डेटा प्राप्त करने और इस सेवा से बात करते हुए संवेदनशील क्रियाएँ करने के लिए निम्नलिखित पृष्ठ की जांच करें:
Kubernetes Enumerationयह सेवा क्लस्टर के हर नोड में चलती है। यह सेवा नोड के अंदर के पॉड्स को नियंत्रित करेगी। यह kube-apiserver के साथ बात करती है।
यदि आप इस सेवा को उजागर पाते हैं, तो आप एक अनधिकृत RCE पा सकते हैं।
यदि प्रतिक्रिया Unauthorized
है, तो इसके लिए प्रमाणीकरण की आवश्यकता है।
यदि आप नोड्स की सूची बना सकते हैं, तो आप निम्नलिखित के साथ kubelets के एंडपॉइंट्स की सूची प्राप्त कर सकते हैं:
आप इस सेवा का दुरुपयोग करके Kubernetes के अंदर विशेषाधिकार बढ़ा सकते हैं:
मेट्रिक्स इकट्ठा करने के लिए उपयोगी सेवा।
जब एक पोर्ट सभी नोड्स में NodePort के माध्यम से एक्सपोज़ किया जाता है, तो वही पोर्ट सभी नोड्स में खोला जाता है जो ट्रैफ़िक को घोषित Service में प्रॉक्सी करता है। डिफ़ॉल्ट रूप से, यह पोर्ट 30000-32767 की रेंज में होगा। इसलिए नए अनचेक किए गए सेवाएँ उन पोर्ट्स के माध्यम से एक्सेस की जा सकती हैं।
गुमनाम पहुंच kube-apiserver API endpoints पर अनुमति नहीं है। लेकिन आप कुछ endpoints की जांच कर सकते हैं:
ETCD क्लस्टर के रहस्यों, कॉन्फ़िगरेशन फ़ाइलों और अधिक संवेदनशील डेटा को संग्रहीत करता है। डिफ़ॉल्ट रूप से, ETCD गुमनाम रूप से पहुंचा नहीं जा सकता, लेकिन इसे जांचना हमेशा अच्छा होता है।
यदि ETCD को गुमनाम रूप से पहुंचा जा सकता है, तो आपको **etcdctl उपकरण का उपयोग करने की आवश्यकता हो सकती है। निम्नलिखित कमांड सभी कुंजी प्राप्त करेगा:
The Kubelet documentation बताता है कि डिफ़ॉल्ट रूप से गुमनाम पहुँच सेवा के लिए अनुमति है:
Kubelet सर्वर के लिए गुमनाम अनुरोधों को सक्षम करता है। अनुरोध जो किसी अन्य प्रमाणीकरण विधि द्वारा अस्वीकृत नहीं होते हैं, उन्हें गुमनाम अनुरोधों के रूप में माना जाता है। गुमनाम अनुरोधों का उपयोगकर्ता नाम
system:anonymous
है, और समूह का नामsystem:unauthenticated
है।
Kubelet API के प्रमाणीकरण और प्राधिकरण के काम करने के तरीके को बेहतर समझने के लिए इस पृष्ठ को देखें:
Kubelet Authentication & AuthorizationKubelet सेवा API का दस्तावेज़ नहीं है, लेकिन स्रोत कोड यहाँ पाया जा सकता है और उजागर किए गए एंडपॉइंट्स को चलाने के रूप में खोजना आसान है:
सभी दिलचस्प लगते हैं।
आप Kubeletctl टूल का उपयोग Kubelets और उनके एंडपॉइंट्स के साथ इंटरैक्ट करने के लिए कर सकते हैं।
यह एंडपॉइंट पॉड्स और उनके कंटेनरों की सूची देता है:
यह एंडपॉइंट किसी भी कंटेनर के अंदर कोड को बहुत आसानी से निष्पादित करने की अनुमति देता है:
इस हमले से बचने के लिए kubelet सेवा को --anonymous-auth false
के साथ चलाना चाहिए और सेवा को नेटवर्क स्तर पर अलग करना चाहिए।
जब kubelet पढ़ने के लिए केवल पोर्ट को उजागर किया जाता है, तो अनधिकृत पक्षों द्वारा API से जानकारी प्राप्त करना संभव हो जाता है। इस पोर्ट का प्रदर्शन विभिन्न क्लस्टर कॉन्फ़िगरेशन तत्वों के खुलासे का कारण बन सकता है। हालांकि जानकारी, जिसमें पॉड नाम, आंतरिक फ़ाइलों के स्थान, और अन्य कॉन्फ़िगरेशन शामिल हैं, महत्वपूर्ण नहीं हो सकती, फिर भी इसका प्रदर्शन सुरक्षा जोखिम पैदा करता है और इससे बचा जाना चाहिए।
इस भेद्यता का शोषण कैसे किया जा सकता है, इसका एक उदाहरण एक दूरस्थ हमलावर द्वारा एक विशिष्ट URL तक पहुंचना है। http://<external-IP>:10255/pods
पर नेविगेट करके, हमलावर संभावित रूप से kubelet से संवेदनशील जानकारी प्राप्त कर सकता है:
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)