
Praxisorientiertes Capture-the-Flag-Labor für die OWASP Kubernetes Top 10 (2025). Nutzen Sie 11 reale Cluster-Schwachstellen aus, erbeuten Sie Flaggen, wenden Sie dann Korrekturen an und überprüfen Sie diese mit einem automatischen Prüfer. Läuft lokal auf kind.
Ein Capture-the-Flag, aufbauend auf dem OWASP Kubernetes Top 10 — 2025. Du wurdest angeheuert, um NimbusMart zu red-teamen, ein fiktives E-Commerce-Unternehmen, dessen Cluster schneller wuchs als seine Sicherheit. Zehn Herausforderungen, eine pro OWASP-Risiko (plus ein Bonus) – nutze jede Schwachstelle aus, erobere die Flagge, wende dann die Korrektur an und beweise sie mit dem Checker.
Die Weltbibel (Unternehmen, Dienste, Namespaces, Flag-Schema) befindet sich in labs/NIMBUSMART.md.
Alles läuft lokal auf kind. Führe die verwundbaren Manifeste niemals gegen einen echten Cluster aus.
Erstellt von @hac01.
Dies ist keine Folienpräsentation – es ist ein funktionierender, von Natur aus verwundbarer Kubernetes-Cluster plus die Werkzeuge, um ihn anzugreifen, zu reparieren und die Reparatur zu überprüfen. In den elf Herausforderungen bekommst du praktische Erfahrung mit:
hostPath-Mounts und Node-
Breakout (K01).ClusterRoles, übermäßig weitreichende ServiceAccounts,
und wie ein gestohlener Token jedes Secret erreicht (K02, K09).NetworkPolicy-Abschottung (K05).:latest-Images, die in Produktion ausgeliefert werden (Bonus).Für jede Herausforderung erhältst du:
Installiere diese, bevor du beginnst. Das Setup-Skript prüft die ersten vier und bricht schnell mit einer klaren Meldung ab, falls etwas fehlt.
brew-Befehle sind für macOS. Unter Linux verwende deinen Paketmanager oder die verlinkten Originalanleitungen.
Die Web-App, ein In-Browser-Terminal und der Checker können alle innerhalb des kind- Clusters laufen. Ein Befehl startet alles und gibt die URL aus:
./setup.sh # oder: make up
# - erstellt den kind-Cluster, baut Images und lädt sie, stellt bereit, wartet auf Bereitschaft
# - Web-App: http://localhost:30090
# - Terminal: der 'Terminal'-Button in der Web-App
./setup.sh erstellt den Cluster (neu) mit den richtigen Portzuordnungen, baut die beiden
Images (nimbusmart-ctf-web, nimbusmart-ctf-terminal), lädt sie in kind und
wendet deploy/ an. Erster Durchlauf zieht Basis-Images und dauert ~1-2 Minuten.
./setup.sh # frischer Cluster + vollständige Plattform (löscht alten 'owasp-labs'-Cluster)
./setup.sh --keep # vorhandenen 'owasp-labs'-Cluster wiederverwenden, falls vorhanden
Öffne dann http://localhost:30090, wähle eine Herausforderung und verwende den Terminal- Button im Browser, um den Cluster zu steuern.
Der Terminal-Pod läuft als cluster-admin-ServiceAccount, so dass das Terminal im
Browser genau diesen Cluster steuert – führe kubectl apply -f labs/... und
owasp-k8s-checker --check kNN direkt dort aus.
Warnung: Das In-Browser-Terminal hat effektiv cluster-admin über ein WebSocket. Es ist nur sicher, weil es an deinen lokalen, wegwerfbaren kind-Cluster auf
localhostgebunden ist. Setze die Ports30080/30090/30091niemals einem unsicheren Netzwerk aus.
kind delete cluster --name owasp-labs # oder: make cluster-down
.
├── setup.sh Ein-Befehl-Bootstrap (Cluster + Images + Deploy)
├── Makefile Komfortziele – führe `make help` aus, um sie anzuzeigen
├── web/ Next.js + React-App (weiß/lila Thema) – die UI
├── labs/ Echte K8s-Manifeste pro Risiko (vulnerable.yaml + fixed.yaml + README)
│ ├── NIMBUSMART.md Weltbibel: Unternehmen, Namespaces, Flag-Schema
│ └── kind-cluster.yaml Gemeinsame lokale Cluster-Konfiguration (Portzuordnungen)
├── deploy/ Manifeste für In-Cluster-Plattform (Web + Terminal + RBAC) + build.sh
├── terminal-server/ WebSocket-Backend für das In-Browser-Terminal
└── checker/ Go-Binary, das einen Cluster gegen die Top 10 validiert
Nützliche make-Ziele (make help zeigt alle):
Jede Herausforderung ist eine echte Schwachstelle in NimbusMart's Cluster – wähle ein Ziel, nutze es aus, erobere die Flagge, patche sie dann und beweise die Korrektur mit dem Checker.
Was sich von 2022 geändert hat: Autorisierung (war RBAC) erweitert; Secrets, Netzwerk, Authn und Logging neu angeordnet; Übermäßig exponierte Komponenten (K06) und Cluster-zu-Cloud Lateralbewegung (K08) hinzugefügt; Fehlkonfigurierte + Veraltete Komponenten in K07 zusammengeführt; Supply Chain als Bonus-Herausforderung verschoben. Siehe
labs/NIMBUSMART.mdfür die vollständige Zuordnung von Herausforderung zu Dienst zu Schwachstelle, Schwierigkeitsgrad und Punkte (2000 über 10 Herausforderungen, +300 Bonus).
Bevorzugst du, die UI lokal auszuführen und Labs von deiner eigenen Shell aus zu steuern? Du kannst die Teile von Hand verbinden.
cd web
npm install
npm run dev
# öffne http://localhost:3000 (oder: make web)
Das Terminal-Backend läuft separat auf :30091 und verwendet deine ~/.kube/config:
make terminal-local
kind create cluster --config labs/kind-cluster.yaml # oder: make cluster
kubectl config use-context kind-owasp-labs
Jede Herausforderung hat ihr eigenes README, aber das Muster ist dasselbe:
# einige Herausforderungen seeden zuerst ein Ziel (eine Node-Datei, ein Ops-Secret, ...)
kubectl apply -f labs/k01-insecure-workload/setup.yaml # nur wenn vorhanden
# setze die verwundbare Ressource ein und nutze sie aus, um die Flagge zu erobern
kubectl apply -f labs/k01-insecure-workload/vulnerable.yaml
# ...folge dem Missionsbriefing / den Hinweisen in der Web-App, schnapp dir FLAG{...}, reiche es ein...
# wende die gehärtete Version an und bestätige, dass der Flaggenweg geschlossen ist
kubectl delete -f labs/k01-insecure-workload/vulnerable.yaml
kubectl apply -f labs/k01-insecure-workload/fixed.yaml
Setze alles zwischen den Herausforderungen mit make clean-labs zurück.
cd checker
go run . --list # alle Checks anzeigen
go run . --check k01 # einen einzelnen Check ausführen
go run . --all # den gesamten Cluster scannen
go run . --all --json # maschinenlesbar (für CI)
go run . --all -n apps # auf einen Namespace beschränken
Der Checker beendet sich mit einem Fehlercode ungleich Null, wenn ein Check fehlschlägt, sodass er CI blockieren kann.
Erstelle ein eigenständiges Binary:
cd checker
go build -o owasp-k8s-checker . # oder: make checker
./owasp-k8s-checker --all
Jedes checker/checks/kNN.go validiert dieselbe Kontrolle, die das passende Lab lehrt.
Setze das fixed.yaml ein, führe go run . --check kNN aus, und du solltest PASS sehen.
Setze das vulnerable.yaml ein, und derselbe Check meldet die spezifischen Funde.
Sicherheit: Die verwundbaren Manifeste sind absichtlich ausnutzbar. Verwende nur einen lokalen, wegwerfbaren
kind/minikube-Cluster. Lösche ihn, wenn du fertig bist:kind delete cluster --name owasp-labs.
| Tool | Warum | Installieren |
|---|
| Docker | Führt den kind-Cluster aus und baut Images. Muss laufen. | Docker Desktop / Engine |
| kind | Lokaler Kubernetes-Cluster in Docker. | brew install kind |
| kubectl | Sprich mit dem Cluster. | brew install kubectl |
| Go 1.21+ | Baut und führt das Checker-Binary aus. | brew install go |
| Node.js 18+ | Nur zum lokalen Ausführen der Web-App (make web). Nicht für das Ein-Befehl-In-Cluster-Setup erforderlich. | brew install node |
| Ziel | Was es tut |
|---|
make up | Ein Schuss: Cluster + Images + Deploy (führt setup.sh aus) |
make web | Starte die Web-App im Dev-Modus auf :3000 |
make cluster / make cluster-down | Lokalen kind-Cluster erstellen / löschen |
make scan | Führe jeden Checker gegen den aktuellen Cluster aus |
make check ID=k01 | Führe einen einzelnen Check aus |
make clean-labs | Lösche alle Lab-Ressourcen (zurücksetzen zwischen Herausforderungen) |
| ID | Risiko | Lab-Ordner |
|---|
| K01 | Unsichere Workload-Konfigurationen | labs/k01-insecure-workload |
| K02 | Zu permissive Autorisierungskonfigurationen | labs/k02-authorization |
| K03 | Fehler im Secrets-Management | labs/k03-secrets |
| K04 | Fehlende clusterweite Policy-Erzwingung | labs/k04-policy-enforcement |
| K05 | Fehlende Netzwerksegmentierungssteuerung | labs/k05-network-segmentation |
| K06 | Übermäßig exponierte Kubernetes-Komponenten | labs/k06-exposed-components |
| K07 | Fehlkonfigurierte und verwundbare Cluster-Komponenten | labs/k07-cluster-components |
| K08 | Cluster-zu-Cloud Lateralbewegung | labs/k08-cluster-to-cloud |
| K09 | Defekte Authentifizierungsmechanismen | labs/k09-authentication |
| K10 | Unzureichendes Logging und Monitoring | labs/k10-logging-monitoring |
| Bonus | Supply-Chain-Schwachstellen | labs/kbonus-supply-chain |