
معمل عملي من نوع "التقط العلم" لتصنيف OWASP Kubernetes Top 10 (2025). استغل 11 ثغرة حقيقية في المجموعات، التقط الأعلام، ثم طبق الإصلاحات وتحقق منها باستخدام مدقق آلي. يعمل محليًا على kind.
لعبة التقط العلم مبنية على OWASP Kubernetes Top 10 — 2025. لقد تم تعيينك كفريق اختراق أخلاقي لـ NimbusMart، وهي شركة تجارة إلكترونية خيالية نما كتلة (cluster) الخاصة بها أسرع من أمانها. عشرة تحديات، واحد لكل خطر من OWASP (بالإضافة إلى تحدٍ إضافي) — استغل كل نقطة ضعف، التقط العلم، ثم طبق الإصلاح وأثبت صحته باستخدام المدقق.
الكتاب المقدس (الشركة، الخدمات، مساحات الأسماء، مخطط الأعلام) موجود في labs/NIMBUSMART.md.
كل شيء يعمل محليًا على kind. لا تقم أبدًا بتشغيل الملفات الضعيفة ضد كتلة حقيقية.
بُني بواسطة @hac01.
هذه ليست مجموعة شرائح — إنها كتلة Kubernetes عاملة وضعيفة التصميم بالإضافة إلى الأدوات اللازمة لمهاجمتها وإصلاحها والتحقق من الإصلاح. عبر التحديات الإحدى عشر، ستتعامل عمليًا مع:
hostPath، والاختراق العقدي (K01).ClusterRole ذات العلامات البدل (wildcard)، وحسابات الخدمة ذات النطاق الواسع (over-scoped ServiceAccounts)، وكيف يمكن لرمز مسروق واحد الوصول إلى جميع الأسرار (K02, K09).NetworkPolicy (K05).:latest غير موثوقة وقابلة للتغيير يتم شحنها إلى الإنتاج (تحدٍ إضافي).لكل تحدٍ تحصل على:
قم بتثبيت هذه قبل البدء. يقوم سكريبت الإعداد بالتحقق من الأربعة الأولى ويخرج بسرعة برسالة واضحة إذا كان أي منها مفقودًا.
أوامر
brewمخصصة لنظام macOS. على Linux، استخدم مدير الحزم الخاص بك أو التعليمات من المصدر المرتبط.
تطبيق الويب، وطرفية المتصفح، والمدقق يمكنهم جميعًا العمل داخل كتلة kind. أمر واحد يشغل كل شيء ويطبع الرابط:
./setup.sh # أو: make up
# - ينشئ كتلة kind، ويبني ويحمل الصور، وينشر، وينتظر حتى يصبح جاهزًا
# - تطبيق الويب: http://localhost:30090
# - الطرفية: زر 'Terminal' في تطبيق الويب
./setup.sh (ينشئ) الكتلة من جديد مع تعيينات المنافذ الصحيحة، ويبني الصورتين (nimbusmart-ctf-web, nimbusmart-ctf-terminal)، ويحملها إلى kind، ويطبق deploy/. التشغيل الأول يسحب الصور الأساسية ويستغرق حوالي 1-2 دقيقة.
./setup.sh # كتلة جديدة + منصة كاملة (يحذف أي كتلة قديمة باسم 'owasp-labs')
./setup.sh --keep # يعيد استخدام كتلة 'owasp-labs' الموجودة إذا كانت موجودة
ثم افتح **http://localhost:30090**، اختر تحدٍ، واستخدم زر Terminal في المتصفح لقيادة الكتلة.
تعمل حاوية الطرفية كحساب خدمة cluster-admin، لذا فإن الطرفية في المتصفح تقود هذه الكتلة نفسها — قم بتشغيل kubectl apply -f labs/... و owasp-k8s-checker --check kNN هناك.
تحذير: الطرفية داخل المتصفح تعادل
cluster-adminعبر WebSocket. إنها آمنة فقط لأنها مقيدة بكتلة kind المحلية المؤقتة علىlocalhost. لا تقم أبدًا بتعريض المنافذ30080/30090/30091لشبكة غير موثوقة.
kind delete cluster --name owasp-labs # أو: make cluster-down
.
├── setup.sh سكريبت بدء التشغيل أحادي الأمر (كتلة + صور + نشر)
├── Makefile أهداف مساعدة — قم بتشغيل `make help` لعرضها
├── web/ تطبيق Next.js + React (سمة بيضاء/بنفسجية) — واجهة المستخدم
├── labs/ ملفات Kubernetes الفعلية لكل خطر (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؛ نقل سلسلة التوريد إلى تحدٍ إضافي. انظر
labs/NIMBUSMART.mdللحصول على خريطة كاملة من التحدي إلى الخدمة إلى نقطة الضعف، الصعوبة، والنقاط (2000 عبر 10 تحديات، +300 للتحدي الإضافي).
تفضل تشغيل واجهة المستخدم محليًا وقيادة المختبرات من شاشتك الخاصة؟ يمكنك ربط القطع يدويًا.
cd web
npm install
npm run dev
# افتح http://localhost:3000 (أو: make web)
تعمل النهاية الخلفية للطرفية بشكل منفصل على :30091 باستخدام ~/.kube/config الخاص بك:
make terminal-local
kind create cluster --config labs/kind-cluster.yaml # أو: make cluster
kubectl config use-context kind-owasp-labs
كل تحدٍ له ملف README خاص به، لكن النمط هو نفسه:
# بعض التحديات تزرع هدفًا أولاً (ملف عقدة، سر عمليات، ...)
kubectl apply -f labs/k01-insecure-workload/setup.yaml # فقط إذا كان موجودًا
# نشر المورد الضعيف واستغلاله لالتقاط العلم
kubectl apply -f labs/k01-insecure-workload/vulnerable.yaml
# ... اتبع إحاطة المهمة / التلميحات في تطبيق الويب، احصل على FLAG{...}، قدمها...
# طبق النسخة المحصنة وأكد أن مسار العلم قد أغلق
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 # عرض جميع الفحوصات
go run . --check k01 # تشغيل فحص واحد
go run . --all # مسح الكتلة بأكملها
go run . --all --json # قابل للقراءة آليًا (لـ CI)
go run . --all -n apps # قصر النطاق على مساحة اسم
يخرج المدقق بقيمة غير صفرية إذا فشل أي فحص، لذا يمكنه التحكم في CI.
بناء ملف ثنائي مستقل:
cd checker
go build -o owasp-k8s-checker . # أو: 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.
| الأداة | لماذا | التثبيت |
|---|
| Docker | يدير كتلة kind ويبني الصور. يجب أن يكون قيد التشغيل. | Docker Desktop / Engine |
| kind | كتلة Kubernetes محلية داخل Docker. | brew install kind |
| kubectl | التحدث إلى الكتلة. | brew install kubectl |
| Go 1.21+ | بناء وتشغيل المدقق الثنائي. | brew install go |
| Node.js 18+ | فقط لتشغيل تطبيق الويب محليًا (make web). غير مطلوب للإعداد أحادي الأمر داخل الكتلة. | brew install node |
| الهدف | ما يفعله |
|---|
make up | دفعة واحدة: كتلة + صور + نشر (يشغل setup.sh) |
make web | تشغيل تطبيق الويب في وضع التطوير على :3000 |
make cluster / make cluster-down | إنشاء / حذف كتلة kind المحلية |
make scan | تشغيل جميع المدققات على الكتلة الحالية |
make check ID=k01 | تشغيل مدقق واحد |
make clean-labs | حذف جميع موارد المختبرات (إعادة تعيين بين التحديات) |
| المعرف | الخطر | مجلد المختبر |
|---|
| 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 |
| إضافي | ثغرات سلسلة التوريد | labs/kbonus-supply-chain |