
Laboratorio práctico de captura de banderas para el OWASP Kubernetes Top 10 (2025). Explota 11 debilidades reales de clúster, captura banderas, luego aplica correcciones y verifica con un comprobador automatizado. Se ejecuta localmente en kind.
Un capture-the-flag basado en el OWASP Kubernetes Top Ten — 2025. Te han contratado como red team para NimbusMart, una empresa ficticia de comercio electrónico cuyo clúster creció más rápido que su seguridad. Diez desafíos, uno por cada riesgo de OWASP (más un bonus): explota cada debilidad, captura la bandera, luego aplica la corrección y demuéstrala con el verificador.
La biblia del mundo (empresa, servicios, namespaces, esquema de banderas) está en labs/NIMBUSMART.md.
Todo se ejecuta localmente con kind. Nunca ejecutes los manifiestos vulnerables contra un clúster real.
Creado por @hac01.
Esto no es una presentación de diapositivas, es un clúster Kubernetes funcional y vulnerable por diseño, junto con las herramientas para atacarlo, corregirlo y verificar la corrección. En los once desafíos practicarás con:
hostPath y
escape de nodo (K01).ClusterRoles comodín, ServiceAccounts con demasiado ámbito,
y cómo un solo token robado llega a todos los secretos (K02, K09).NetworkPolicy (K05).:latest no confiables y mutables enviadas a producción (bonus).Por cada desafío obtienes:
Instala estos antes de empezar. El script de configuración verifica los primeros cuatro y falla rápidamente con un mensaje claro si falta alguno.
| Herramienta | Por qué | Instalar |
|---|---|---|
| Docker | Ejecuta el clúster kind y construye imágenes. Debe estar en ejecución. | Docker Desktop / Engine |
| kind | Clúster Kubernetes local en Docker. | brew install kind |
| kubectl | Habla con el clúster. | brew install kubectl |
| Go 1.21+ | Construye y ejecuta el binario verificador. | brew install go |
| Node.js 18+ | Solo para ejecutar la aplicación web localmente (make web). No es necesario para la configuración dentro del clúster con un solo comando. | brew install node |
Los comandos
brewson para macOS. En Linux usa tu gestor de paquetes o las instrucciones enlazadas.
La aplicación web, un terminal en el navegador y el verificador pueden ejecutarse dentro del clúster kind. Un solo comando levanta todo e imprime la URL:
./setup.sh # o: make up
# - crea el clúster kind, construye y carga imágenes, despliega, espera a que esté listo
# - App web: http://localhost:30090
# - Terminal: el botón 'Terminal' en la aplicación web
./setup.sh (re)crea el clúster con los mapeos de puertos correctos, construye las dos
imágenes (nimbusmart-ctf-web, nimbusmart-ctf-terminal), las carga en kind y
aplica deploy/. La primera ejecución descarga las imágenes base y tarda ~1-2 minutos.
./setup.sh # clúster nuevo + plataforma completa (elimina cualquier clúster 'owasp-labs' antiguo)
./setup.sh --keep # reutiliza un clúster 'owasp-labs' existente si está presente
Luego abre http://localhost:30090, elige un desafío y usa el botón Terminal en el navegador para manejar el clúster.
El pod del terminal se ejecuta como una ServiceAccount con privilegios cluster-admin, por lo que el terminal en el
navegador maneja este mismo clúster — ejecuta kubectl apply -f labs/... y
owasp-k8s-checker --check kNN directamente allí.
Advertencia: el terminal en el navegador es efectivamente cluster-admin sobre un WebSocket. Solo es seguro porque está vinculado a tu clúster kind local y desechable en
localhost. Nunca expongas los puertos30080/30090/30091a una red no confiable.
kind delete cluster --name owasp-labs # o: make cluster-down
.
├── setup.sh Arranque con un solo comando (clúster + imágenes + despliegue)
├── Makefile Objetivos de conveniencia — ejecuta `make help` para listarlos
├── web/ App Next.js + React (tema blanco/morado) — la interfaz
├── labs/ Manifiestos K8s reales por riesgo (vulnerable.yaml + fixed.yaml + README)
│ ├── NIMBUSMART.md Biblia del mundo: empresa, namespaces, esquema de banderas
│ └── kind-cluster.yaml Configuración del clúster local compartido (mapeos de puertos)
├── deploy/ Manifiestos de la plataforma dentro del clúster (web + terminal + RBAC) + build.sh
├── terminal-server/ Backend WebSocket para el terminal en el navegador
└── checker/ Binario Go que valida un clúster contra el Top 10
Objetivos útiles de make (make help muestra todos):
| Objetivo | Qué hace |
|---|---|
make up | Un solo paso: clúster + imágenes + despliegue (ejecuta setup.sh) |
make web | Ejecuta la app web en modo dev en :3000 |
make cluster / make cluster-down | Crear / eliminar el clúster kind local |
make scan | Ejecuta todos los verificadores contra el clúster actual |
make check ID=k01 | Ejecuta una sola verificación |
make clean-labs | Elimina todos los recursos del laboratorio (reinicio entre desafíos) |
Cada desafío es una debilidad real en el clúster de NimbusMart — elige un objetivo, explótalo, captura la bandera, luego parchéala y demuestra la corrección con el verificador.
