
OWASP Kubernetes Top 10 (2025) के लिए व्यावहारिक कैप्चर-द-फ्लैग लैब। 11 वास्तविक-विश्व क्लस्टर कमजोरियों का शोषण करें, फ्लैग कैप्चर करें, फिर फिक्स लागू करें और एक स्वचालित जांचकर्ता से सत्यापित करें। स्थानीय रूप से kind पर चलता है।
एक कैप्चर-द-फ्लैग जो OWASP Kubernetes Top 10 — 2025 पर आधारित है। आपको NimbusMart की रेड-टीम के लिए काम पर रखा गया है, जो एक काल्पनिक ई-कॉमर्स कंपनी है जिसका क्लस्टर इसकी सुरक्षा से तेजी से बढ़ा। दस चुनौतियाँ, प्रति OWASP जोखिम एक (साथ ही एक बोनस) — प्रत्येक कमज़ोरी का शोषण करें, फ़्लैग कैप्चर करें, फिर फिक्स लागू करें और चेकर से इसे साबित करें।
दुनिया की बाइबिल (कंपनी, सेवाएं, नेमस्पेस, फ़्लैग योजना) labs/NIMBUSMART.md में है।
सब कुछ स्थानीय रूप से kind पर चलता है। वास्तविक क्लस्टर पर कमज़ोर मैनिफेस्ट को कभी न चलाएं।
@hac01 द्वारा निर्मित।
यह कोई स्लाइड डेक नहीं है — यह एक कार्यशील, डिज़ाइन द्वारा कमज़ोर Kubernetes क्लस्टर है जिसमें उस पर हमला करने, ठीक करने और फिक्स को सत्यापित करने के लिए टूलिंग शामिल है। ग्यारह चुनौतियों में आप इन चीज़ों का व्यावहारिक अनुभव प्राप्त करते हैं:
hostPath माउंट, और नोड ब्रेकआउट (K01)।ClusterRoles, अत्यधिक-स्कोप किए गए ServiceAccounts, और कैसे एक चुराया गया टोकन हर सीक्रेट तक पहुँचता है (K02, K09)।NetworkPolicy लॉकडाउन (K05)।:latest इमेज जो प्रोड में भेजी गईं (बोनस)।प्रत्येक चुनौती के लिए आपको मिलता है:
शुरू करने से पहले इन्हें इंस्टॉल करें। सेटअप स्क्रिप्ट पहले चार की जाँच करती है और यदि कोई गायब है तो स्पष्ट संदेश के साथ तुरंत विफल हो जाती है।
brewकमांड macOS के लिए हैं। Linux पर अपने पैकेज मैनेजर या लिंक किए गए अपस्ट्रीम निर्देशों का उपयोग करें।
वेब ऐप, एक ब्राउज़र-आधारित टर्मिनल, और चेकर सभी kind क्लस्टर के अंदर चल सकते हैं। एक कमांड सब कुछ शुरू करता है और URL प्रिंट करता है:
./setup.sh # or: make up
# - creates the kind cluster, builds and loads images, deploys, waits for ready
# - Web app: http://localhost:30090
# - Terminal: the 'Terminal' button in the web app
./setup.sh सही पोर्ट मैपिंग के साथ क्लस्टर बनाता (या पुनः बनाता) है, दो इमेज (nimbusmart-ctf-web, nimbusmart-ctf-terminal) बनाता है, उन्हें kind में लोड करता है, और deploy/ लागू करता है। पहले रन में बेस इमेज खिंचती हैं और इसमें लगभग 1-2 मिनट लगते हैं।
./setup.sh # fresh cluster + full platform (deletes any old 'owasp-labs' cluster)
./setup.sh --keep # reuse an existing 'owasp-labs' cluster if present
फिर http://localhost:30090 खोलें, एक चुनौती चुनें, और ब्राउज़र में Terminal बटन का उपयोग करके क्लस्टर चलाएँ।
टर्मिनल पॉड cluster-admin ServiceAccount के रूप में चलता है, इसलिए ब्राउज़र में टर्मिनल इसी क्लस्टर को चलाता है — वहीं kubectl apply -f labs/... और owasp-k8s-checker --check kNN चलाएँ।
चेतावनी: ब्राउज़र-आधारित टर्मिनल प्रभावी रूप से WebSocket पर cluster-admin है। यह केवल इसलिए सुरक्षित है क्योंकि यह आपके स्थानीय, डिस्पोज़ेबल kind क्लस्टर पर
localhostसे बंधा है। पोर्ट30080/30090/30091को कभी भी अविश्वसनीय नेटवर्क पर एक्सपोज़ न करें।
kind delete cluster --name owasp-labs # or: make cluster-down
.
├── setup.sh एक-कमांड बूटस्ट्रैप (क्लस्टर + इमेज + डिप्लॉय)
├── Makefile सुविधाजनक लक्ष्य — उन्हें सूचीबद्ध करने के लिए `make help` चलाएँ
├── web/ Next.js + React ऐप (सफेद/बैंगनी थीम) — UI
├── labs/ प्रति जोखिम वास्तविक K8s मैनिफेस्ट (vulnerable.yaml + fixed.yaml + README)
│ ├── NIMBUSMART.md विश्व बाइबिल: कंपनी, नेमस्पेस, फ़्लैग योजना
│ └── kind-cluster.yaml साझा स्थानीय क्लस्टर कॉन्फ़िग (पोर्ट मैपिंग)
├── deploy/ इन-क्लस्टर प्लेटफॉर्म मैनिफेस्ट (वेब + टर्मिनल + RBAC) + build.sh
├── terminal-server/ ब्राउज़र-आधारित टर्मिनल के लिए WebSocket बैकएंड
└── checker/ Go बाइनरी जो Top 10 के विरुद्ध क्लस्टर को मान्य करता है
उपयोगी make लक्ष्य (make help सभी दिखाता है):
प्रत्येक चुनौती NimbusMart के क्लस्टर में एक वास्तविक कमज़ोरी है — एक लक्ष्य चुनें, उसका शोषण करें, फ़्लैग कैप्चर करें, फिर इसे पैच करें और चेकर से फिक्स साबित करें।
2022 से क्या बदला: प्राधिकरण (पहले RBAC था) विस्तृत हुआ; सीक्रेट, नेटवर्क, प्रमाणीकरण और लॉगिंग पुनर्क्रमित; ओवरली एक्सपोज़्ड कम्पोनेंट्स (K06) और क्लस्टर-टू-क्लाउड लैटरल मूवमेंट (K08) जोड़े गए; गलत कॉन्फ़िगर + पुराने घटक K07 में विलय; सप्लाई चेन को बोनस चुनौती में स्थानांतरित किया गया। पूर्ण चुनौती-से-सेवा-से-कमज़ोरी मैप, कठिनाई और अंक (10 चुनौतियों में 2000, +300 बोनस) के लिए
labs/NIMBUSMART.mdदेखें।
क्या आप UI को स्थानीय रूप से चलाना और अपने स्वयं के शेल से लैब चलाना पसंद करते हैं? आप टुकड़ों को हाथ से जोड़ सकते हैं।
cd web
npm install
npm run dev
# open http://localhost:3000 (or: make web)
टर्मिनल बैकएंड आपके ~/.kube/config का उपयोग करके अलग से :30091 पर चलता है:
make terminal-local
kind create cluster --config labs/kind-cluster.yaml # or: make cluster
kubectl config use-context kind-owasp-labs
प्रत्येक चुनौती का अपना README है, लेकिन पैटर्न समान है:
# some challenges seed a target first (a node file, an ops secret, ...)
kubectl apply -f labs/k01-insecure-workload/setup.yaml # only if present
# deploy the vulnerable resource and exploit it to capture the flag
kubectl apply -f labs/k01-insecure-workload/vulnerable.yaml
# ...follow the mission briefing / hints in the web app, grab FLAG{...}, submit it...
# apply the hardened version and confirm the flag path is closed
kubectl delete -f labs/k01-insecure-workload/vulnerable.yaml
kubectl apply -f labs/k01-insecure-workload/fixed.yaml
make clean-labs से चुनौतियों के बीच सब कुछ रीसेट करें।
cd checker
go run . --list # show all checks
go run . --check k01 # run a single check
go run . --all # scan the whole cluster
go run . --all --json # machine-readable (for CI)
go run . --all -n apps # scope to a namespace
यदि कोई जाँच विफल होती है तो चेकर गैर-शून्य के साथ बाहर निकलता है, इसलिए यह CI को गेट कर सकता है।
एक स्टैंडअलोन बाइनरी बनाएँ:
cd checker
go build -o owasp-k8s-checker . # or: make checker
./owasp-k8s-checker --all
प्रत्येक checker/checks/kNN.go उसी नियंत्रण को मान्य करता है जो मेल खाने वाली लैब सिखाती है। fixed.yaml तैनात करें, go run . --check kNN चलाएँ, और आपको PASS देखना चाहिए। vulnerable.yaml तैनात करें और वही जाँच विशिष्ट निष्कर्षों की रिपोर्ट करती है।
सुरक्षा: कमज़ोर मैनिफेस्ट जानबूझकर शोषण योग्य हैं। केवल स्थानीय, डिस्पोज़ेबल
kind/minikubeक्लस्टर का उपयोग करें। जब आपका काम हो जाए तो इसे हटा दें:kind delete cluster --name owasp-labs।
| Tool | Why | Install |
|---|
| Docker | kind क्लस्टर चलाता है और इमेज बनाता है। चालू होना चाहिए। | Docker Desktop / Engine |
| kind | Docker में स्थानीय Kubernetes क्लस्टर। | brew install kind |
| kubectl | क्लस्टर से बात करें। | brew install kubectl |
| Go 1.21+ | चेकर बाइनरी बनाता और चलाता है। | brew install go |
| Node.js 18+ | केवल वेब ऐप को स्थानीय रूप से चलाने के लिए (make web)। एक-कमांड इन-क्लस्टर सेटअप के लिए आवश्यक नहीं है। | brew install node |
| Target | What it does |
|---|
make up | एक बार में: क्लस्टर + इमेज + डिप्लॉय (setup.sh चलाता है) |
make web | वेब ऐप को डेव मोड में :3000 पर चलाएँ |
make cluster / make cluster-down | स्थानीय kind क्लस्टर बनाएँ / हटाएँ |
make scan | वर्तमान क्लस्टर के विरुद्ध प्रत्येक चेकर चलाएँ |
make check ID=k01 | एकल जाँच चलाएँ |
make clean-labs | सभी लैब संसाधन हटाएँ (चुनौतियों के बीच रीसेट) |
| ID | जोखिम | लैब फ़ोल्डर |
|---|
| K01 | असुरक्षित वर्कलोड कॉन्फ़िगरेशन | labs/k01-insecure-workload |
| K02 | अत्यधिक अनुमोदक प्राधिकरण कॉन्फ़िगरेशन | labs/k02-authorization |
| K03 | गुप्त प्रबंधन विफलताएँ | labs/k03-secrets |
| K04 | क्लस्टर-स्तरीय नीति प्रवर्तन का अभाव | labs/k04-policy-enforcement |
| K05 | गायब नेटवर्क विभाजन नियंत्रण | labs/k05-network-segmentation |
| K06 | अत्यधिक एक्सपोज़्ड Kubernetes घटक | labs/k06-exposed-components |
| K07 | गलत कॉन्फ़िगर और कमज़ोर क्लस्टर घटक | labs/k07-cluster-components |
| K08 | क्लस्टर-से-क्लाउड पार्श्व गति | labs/k08-cluster-to-cloud |
| K09 | टूटे हुए प्रमाणीकरण तंत्र | labs/k09-authentication |
| K10 | अपर्याप्त लॉगिंग और मॉनिटरिंग | labs/k10-logging-monitoring |
| Bonus | सप्लाई चेन कमज़ोरियाँ | labs/kbonus-supply-chain |