
k8scout v0.1.2
एक समझौता किए गए Kubernetes पॉड में एक ही बाइनरी ड्रॉप करें और तुरंत क्लस्टर-एडमिन, नोड एस्केप, सीक्रेट चोरी और क्लाउड IAM अधिग्रहण के लिए हर यथार्थवादी हमले का मार्ग मैप करें।
k8scout
बीटा — एकल-बाइनरी कुबरनेट्स हमला पथ इंजन अधिकृत सुरक्षा मूल्यांकन के लिए।
इसे एक समझौता किए गए पॉड में डालें, चलाएँ, और हर यथार्थवादी एस्केलेशन पथ का नक्शा प्राप्त करें — आपके वर्तमान फुटहोल्ड से क्लस्टर-एडमिन, नोड एक्सेस, सीक्रेट चोरी, और क्लाउड IAM भूमिकाओं तक।
विचार
आपके पास Kubernetes पॉड में RCE है। अब क्या?
k8scout उस प्रश्न का उत्तर देता है। यह स्वचालित रूप से पता लगाता है कि समझौता किए गए पॉड का सेवा खाता क्या कर सकता है, RBAC ग्राफ का मानचित्रण करता है, और आपके सटीक फुटहोल्ड से उच्च-मूल्य वाले लक्ष्यों तक बहु-चरणीय हमला पथों का पता लगाता है।
यह तीन मोड में काम करता है:
- आक्रामक मोड (डिफ़ॉल्ट) — एक समझौता किए गए पॉड के अंदर से चलाएँ। आपकी पहचान, अनुमतियाँ, और आपकी वर्तमान स्थिति से सभी पहुँच योग्य एस्केलेशन पथों की खोज करता है।
- समीक्षक मोड (
--reviewer-mode) — सभी पहचानों के लिए पूर्ण क्लस्टर हमला सतह का ऑडिट करने के लिए केवल-पढ़ने वाले SA के साथ चलाएँ। - जांच मोड (
--recon) — आपकी पहचान, प्रभावी अनुमतियाँ, और आप किन संसाधनों को छू सकते हैं, इसका तेज़, कम-पदचिह्न दृश्य। कोई ग्राफ़ या पथ खोज नहीं। क्लस्टर-वाइड सूचीबद्ध नहीं कर सकने वाले नेमस्पेस खोजने के लिए--bruteforce-nsजोड़ें।
डेमो
यह क्या ढूंढता है
k8scout एक भारित अनुमति ग्राफ बनाता है और यथार्थवादी बहु-चरणीय हमला श्रृंखलाओं की खोज के लिए Dijkstra-आधारित पथ खोज चलाता है:
- पॉड से क्लस्टर-एडमिन — RBAC बाइंडिंग, वर्कलोड म्यूटेशन, या CRB निर्माण के माध्यम से
- कंटेनर से बचकर नोड तक — विशेषाधिकार प्राप्त कंटेनरों, hostPID, hostNetwork, खतरनाक क्षमताओं, या hostPath माउंट के माध्यम से
- पार्श्व गति — अन्य पॉड्स में exec, उनके SA टोकन चुराना, उनकी अनुमतियों के माध्यम से पिवट करना
- सीक्रेट और क्रेडेंशियल चोरी — माउंटेड SA टोकन, सीक्रेट, लीक हुए क्रेडेंशियल्स वाले कॉन्फिगमैप, अनाथ टोकन
- क्लाउड IAM एस्केलेशन — IRSA (AWS), GKE वर्कलोड आइडेंटिटी, Azure वर्कलोड आइडेंटिटी, प्रोजेक्टेड टोकन ऑडियंस का दुरुपयोग
- प्रतिरूपण श्रृंखलाएँ — प्रतिरूपण अनुमतियों के माध्यम से SA-से-SA अधिग्रहण
- वर्कलोड म्यूटेशन — एक डिप्लॉयमेंट को पैच करके उसका SA बदलें, फिर उस SA की अनुमतियाँ प्राप्त करें
- वेबहुक इंजेक्शन — भविष्य के वर्कलोड में इंजेक्ट करने के लिए म्यूटेटिंग वेबहुक नियंत्रण
- GitOps ऑपरेटर दुरुपयोग — ArgoCD, Flux, एक्सटर्नल सीक्रेट्स, और Vault ऑपरेटर विशेषाधिकार एस्केलेशन
- गलत कॉन्फ़िगरेशन का पता लगाना — लटकती बाइंडिंग, वाइल्डकार्ड क्रिया, ऑटोमाउंटेड टोकन, एनवी वेरिएबल्स में सादा पाठ सीक्रेट
प्रत्येक खोज में MITRE ATT&CK तकनीक आईडी, एक जोखिम स्कोर, और शामिल वास्तविक ग्राफ नोड्स के साथ चरण-दर-चरण हमला पथ शामिल है। कुल 50 डिटेक्शन नियम।
त्वरित आरंभ
एक समझौता किए गए पॉड से (प्राथमिक उपयोग मामला)
# Copy the binary into the pod
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout
# Run it
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json
# Pull the results
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json
# This flow works exactly like this in you're revshell!
बाइनरी स्वचालित रूप से पता लगाती है कि यह क्लस्टर के अंदर चल रहा है, पॉड और SA की पहचान करता है, और आपके सटीक फुटहोल्ड से पथ खोज शुरू करता है।
इच्छित उपयोग: पेनिट्रेशन टेस्टिंग अभियान, रेड टीम संचालन, आंतरिक सुरक्षा समीक्षाएँ, और क्लस्टर सख्तीकरण ऑडिट। किसी भी क्लस्टर के खिलाफ चलाने से पहले हमेशा उचित प्राधिकरण प्राप्त करें।
अपनी स्थानीय मशीन से
# Uses ~/.kube/config or $KUBECONFIG
k8scout --all-namespaces --out result.json
# Target a single namespace
k8scout --namespace production --out result.json
जांच मोड (त्वरित अनुमति और संसाधन जाँच)
# Who am I, what can I do, and what resources can I access?
k8scout --recon
# Discover namespaces you can't list cluster-wide (built-in wordlist)
k8scout --recon --bruteforce-ns
# Bruteforce with your own namespace wordlist (one name per line)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt
जांच ग्राफ निर्माण, अनुमान और AI को छोड़ देता है — यह "इस टोकन के पास वास्तव में क्या है?" का उत्तर देने का सबसे तेज़ तरीका है। यह वर्तमान पहचान, इसकी प्रभावी अनुमतियाँ (SelfSubjectRulesReview), और प्रति-संसाधन क्षमता मैट्रिक्स (SelfSubjectAccessReview) की रिपोर्ट करता है। --bruteforce-ns यह पुष्टि करता है कि एक नेमस्पेस मौजूद है, प्रत्येक नेमस्पेस में मौजूद ज्ञात ऑब्जेक्ट्स (नेमस्पेस ऑब्जेक्ट, इसका default ServiceAccount, या kube-root-ca.crt ConfigMap) को पढ़कर — उपयोगी जब पहचान नेमस्पेस सूचीबद्ध नहीं कर सकती लेकिन फिर भी विशिष्ट नेमस्पेस तक पहुँच सकती है।
समीक्षक मोड (पूर्ण क्लस्टर ऑडिट)
# Deploy the read-only RBAC and job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml
# Or run directly with reviewer permissions
k8scout --reviewer-mode --all-namespaces --out result.json
AI कथा के साथ
export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json
इंस्टॉलेशन
पूर्व-निर्मित बाइनरीज़
रिलीज़ पृष्ठ से डाउनलोड करें। सभी बाइनरीज़ बिना किसी निर्भरता के स्टैटिकली लिंक्ड हैं।
| बाइनरी | प्लेटफॉर्म |
|---|---|
k8scout-linux-amd64 | Linux x86-64 |
k8scout-linux-arm64 | Linux ARM64 |
k8scout-darwin-amd64 | macOS Intel |
k8scout-darwin-arm64 | macOS Apple Silicon |
स्रोत से निर्माण
Go 1.22+ आवश्यक है।
git clone https://github.com/hac01/k8scout
cd k8scout
make build # native binary
make build-linux # static Linux amd64 binary
make build-all # all four release targets
यह कैसे काम करता है
k8scout (running inside compromised pod)
|
├── 1. Detect foothold
│ Pod name (HOSTNAME), SA (TokenReview), Node (downward API)
│
├── 2. Discover permissions
│ SSRR per namespace + ~30 concurrent SSAR spot-checks
│ (always permitted, no RBAC needed)
│
├── 3. Enumerate cluster objects (graceful degradation if denied)
│ Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs
│
├── 4. Build attack graph
│ Nodes: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities
│ Edges: runs_as, mounts, authenticates_as, can_exec, can_patch,
│ can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
│
├── 5. Find attack paths (Dijkstra from foothold to high-value targets)
│ Weighted by attacker effort — cheapest (most realistic) paths first
│ Targets: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads
│
├── 6. Run inference rules (50 rules with MITRE ATT&CK mapping)
│
├── 7. Optional: AI risk narrative (GPT-4o)
│
└── 8. Output: text summary + JSON report
यहाँ तक कि एक न्यूनतम SA के साथ जो पॉड्स या RBAC ऑब्जेक्ट्स सूचीबद्ध नहीं कर सकता, उपकरण केवल पहचान डेटा से फुटहोल्ड ग्राफ का संश्लेषण करता है और SSRR/SSAR अनुमतियों के माध्यम से जो पहुँच योग्य है उसकी खोज करता है।
हमला ग्राफ विज़ुअलाइज़ेशन
JSON रिपोर्ट को किसी भी ब्राउज़र में web/graph.html में लोड करें (ड्रैग-एंड-ड्रॉप, कोई सर्वर आवश्यक नहीं)।
- Attack Paths टैब — जोखिम स्कोर के अनुसार क्रमबद्ध, प्रत्येक फुटहोल्ड से लक्ष्य तक पूर्ण मल्टी-हॉप श्रृंखला दिखाता है
- मल्टी-चेन दृश्य — एक ही ग्राफ पर एक साथ ओवरलैपिंग अटैक पथों का विज़ुअलाइज़ेशन
- बल-निर्देशित ग्राफ — रंग-कोडित श्रेणियों और जोखिम स्कोर रिंग्स के साथ सभी नोड्स और एजेस
- फोकस मोड — हमला-प्रासंगिक नोड्स को हाईलाइट करने के लिए संरचनात्मक शोर को मंद करता है
- RBAC टॉगल — RBAC नोड्स को छुपाता है लेकिन जब वे सक्रिय हमला पथ का हिस्सा होते हैं तो स्वचालित रूप से दिखाता है
- मिनी-मैप — संदर्भ खोए बिना बड़े ग्राफ़ में नेविगेट करें
- नोड विवरण — मेटाडेटा, कनेक्शन, और संबंधित खोजों के लिए किसी भी नोड पर क्लिक करें
- निर्यात — एक स्व-निहित HTML पेनटेस्ट रिपोर्ट डाउनलोड करें
CLI संदर्भ
k8scout [flags]
Flags:
--out string आउटपुट JSON फ़ाइल पथ (default "k8scout-result.json")
--namespace string एकल नेमस्पेस की गणना करें
--all-namespaces सभी पहुँच योग्य नेमस्पेस की गणना करें (default true)
--format string आउटपुट स्वरूप: text | json (default "text")
--timeout int प्रति-अनुरोध टाइमआउट सेकंड में (default 60)
--log-level string debug | info | warn | error (default "info")
--kubeconfig string kubeconfig का पथ (सेट न होने पर स्वचालित रूप से पता लगाया जाता है)
--reviewer-mode सभी पहचानों के लिए पूर्ण क्लस्टर RBAC ऑडिट
--recon त्वरित जांच: पहचान, अनुमतियाँ (SSRR), पहुँच योग्य संसाधन (SSAR)
--bruteforce-ns नेमस्पेस नामों का ब्रूटफोर्स करें जिन्हें आप सूचीबद्ध नहीं कर सकते (--recon के साथ उपयोग करें)
--ns-wordlist string --bruteforce-ns के लिए कस्टम नेमस्पेस वर्डलिस्ट (डिफ़ॉल्ट एक अंतर्निहित सूची है)
--stealth ऑडिट लॉग पदचिह्न कम करने के लिए SSRR/SSAR छोड़ें
--skip-ssar केवल SSAR स्पॉट-चेक छोड़ें
--openai-key string OpenAI API कुंजी (या OPENAI_API_KEY env var)
--openai-model string OpenAI मॉडल (default "gpt-4o")
--skip-ai AI कथा निर्माण छोड़ें
RBAC आवश्यकताएँ
जब एक समझौता किए गए पॉड से चल रहे हों: कोई विशेष RBAC आवश्यक नहीं है। SSRR और SSAR हमेशा अनुमत हैं। उपकरण सुंदरता से डीग्रेड होता है यदि SA क्लस्टर ऑब्जेक्ट्स सूचीबद्ध नहीं कर सकता — यह अभी भी अनुमतियों की खोज करता है और उपलब्ध चीज़ों से निष्कर्ष उत्पन्न करता है।
पूर्ण गणना के लिए (k8scout SA के लिए अनुशंसित): deploy/rbac.yaml में परिभाषित केवल-पढ़ने की पहुँच:
namespaces,nodes: get, listserviceaccounts,secrets(metadata only),configmaps: get, listpods,deployments,daemonsets,statefulsets,jobs,cronjobs: get, listroles,rolebindings,clusterroles,clusterrolebindings: get, listmutatingwebhookconfigurations,validatingwebhookconfigurations: get, list
सीक्रेट मान कभी नहीं पढ़े जाते जब तक कि पहचान ने SSAR के माध्यम से पुष्ट GET अनुमति न की हो।
बीटा प्रतिक्रिया
k8scout सक्रिय विकास में है। यदि आपको अपने क्लस्टर में कोई बग, गलत सकारात्मक, या डिटेक्शन अंतर मिलता है, तो कृपया एक मुद्दा खोलें। गलत सकारात्मक और छूटे हुए पथ विशेष रूप से उपयोगी हैं — यदि संभव हो तो अनामीकृत खोज JSON शामिल करें।
लाइसेंस
MIT