
Laboratório prático do tipo capture-the-flag para o OWASP Kubernetes Top 10 (2025). Explore 11 vulnerabilidades reais de cluster, capture bandeiras, em seguida aplique correções e verifique com um verificador automatizado. Executa localmente no kind.
Um capture-the-flag baseado no OWASP Kubernetes Top 10 — 2025. Você foi contratado para fazer um red team na NimbusMart, uma empresa fictícia de e-commerce cujo cluster cresceu mais rápido que sua segurança. Dez desafios, um por risco OWASP (mais um bônus) — explore cada vulnerabilidade, capture a flag, então aplique a correção e prove com o verificador.
A bíblia do universo (empresa, serviços, namespaces, esquema de flags) está em labs/NIMBUSMART.md.
Tudo roda localmente no kind. Nunca execute os manifestos vulneráveis em um cluster real.
Construído por @hac01.
Isto não é uma apresentação de slides — é um cluster Kubernetes funcional e propositalmente vulnerável, mais as ferramentas para atacá-lo, corrigi-lo e verificar a correção. Através dos onze desafios, você coloca a mão na massa com:
hostPath e
fuga de nós (K01).ClusterRoles com curingas, ServiceAccounts com escopo excessivo,
e como um único token roubado alcança todos os segredos (K02, K09).NetworkPolicy (K05).:latest não confiáveis e mutáveis enviadas para produção (bônus).Para cada desafio, você recebe:
Instale estes antes de começar. O script de configuração verifica os quatro primeiros e falha rapidamente com uma mensagem clara se algum estiver faltando.
| Ferramenta | Por quê | Instalação |
|---|---|---|
| Docker | Executa o cluster kind e constrói imagens. Deve estar em execução. | Docker Desktop / Engine |
| kind | Cluster Kubernetes local no Docker. | brew install kind |
| kubectl | Comunicar-se com o cluster. | brew install kubectl |
| Go 1.21+ | Constrói e executa o binário do verificador. | brew install go |
| Node.js 18+ | Apenas para executar o aplicativo web localmente (make web). Não necessário para a configuração em um comando dentro do cluster. | brew install node |
Comandos
brewsão para macOS. No Linux, use seu gerenciador de pacotes ou as instruções dos links oficiais fornecidas.
O aplicativo web, um terminal no navegador e o verificador podem todos executar dentro do cluster kind. Um comando levanta tudo e imprime a URL:
./setup.sh # ou: make up
# - cria o cluster kind, constrói e carrega imagens, faz deploy, aguarda ficar pronto
# - Web app: http://localhost:30090
# - Terminal: o botão 'Terminal' no aplicativo web
./setup.sh (re)cria o cluster com os mapeamentos de porta corretos, constrói as duas
imagens (nimbusmart-ctf-web, nimbusmart-ctf-terminal), carrega-as no kind e
aplica deploy/. Na primeira execução, baixa as imagens base e leva ~1-2 minutos.
./setup.sh # cluster novo + plataforma completa (apaga qualquer cluster 'owasp-labs' antigo)
./setup.sh --keep # reutiliza um cluster 'owasp-labs' existente, se presente
Depois abra http://localhost:30090, escolha um desafio e use o botão Terminal no navegador para comandar o cluster.
O pod do terminal executa como uma ServiceAccount cluster-admin, então o terminal no
navegador comanda este mesmo cluster — execute kubectl apply -f labs/... e
owasp-k8s-checker --check kNN ali mesmo.
Aviso: o terminal no navegador é efetivamente cluster-admin sobre um WebSocket. É seguro apenas porque está vinculado ao seu cluster kind local e descartável no
localhost. Nunca exponha as portas30080/30090/30091a uma rede não confiável.
kind delete cluster --name owasp-labs # ou: make cluster-down
.
├── setup.sh Inicialização em um comando (cluster + imagens + deploy)
├── Makefile Alvos de conveniência — execute `make help` para listá-los
├── web/ Aplicativo Next.js + React (tema branco/roxo) — a interface
├── labs/ Manifestos K8s reais por risco (vulnerable.yaml + fixed.yaml + README)
│ ├── NIMBUSMART.md Bíblia do universo: empresa, namespaces, esquema de flags
│ └── kind-cluster.yaml Configuração compartilhada do cluster local (mapeamento de portas)
├── deploy/ Manifestos da plataforma dentro do cluster (web + terminal + RBAC) + build.sh
├── terminal-server/ Backend WebSocket para o terminal no navegador
└── checker/ Binário Go que valida um cluster contra o Top 10
Alvos úteis do make (make help mostra todos):
| Alvo | O que faz |
|---|---|
make up | Tudo de uma vez: cluster + imagens + deploy (executa setup.sh) |
make web | Executa o aplicativo web em modo dev na :3000 |
make cluster / make cluster-down | Cria / exclui o cluster kind local |
make scan | Executa todos os verificadores no cluster atual |
make check ID=k01 | Executa um único verificador |
make clean-labs | Exclui todos os recursos dos laboratórios (reset entre desafios) |
Cada desafio é uma fraqueza real no cluster da NimbusMart — escolha um alvo, explore-o, capture a flag, então corrija e prove a correção com o verificador.
