
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.
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):
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.
O que mudou de 2022: autorização (era RBAC) ampliada; segredos, rede, autenticação e logging reordenados; Componentes Excessivamente Expostos (K06) e Movimento Lateral do Cluster para a Nuvem (K08) adicionados; componentes mal configurados e desatualizados mesclados em K07; Cadeia de Suprimento movida para um desafio bônus. Veja
labs/NIMBUSMART.mdpara o mapa completo desafio-serviço-vulnerabilidade, dificuldade e pontos (2000 em 10 desafios, +300 bônus).
Prefere executar a interface localmente e comandar os laboratórios pelo seu próprio shell? Você pode montar as peças manualmente.
cd web
npm install
npm run dev
# abra http://localhost:3000 (ou: make web)
O backend do terminal é executado separadamente na :30091 usando seu ~/.kube/config:
make terminal-local
kind create cluster --config labs/kind-cluster.yaml # ou: make cluster
kubectl config use-context kind-owasp-labs
Cada desafio tem seu próprio README, mas o padrão é o mesmo:
# alguns desafios primeiro preparam um alvo (um arquivo no nó, um segredo de operações, ...)
kubectl apply -f labs/k01-insecure-workload/setup.yaml # apenas se existir
# faça deploy do recurso vulnerável e explore-o para capturar a flag
kubectl apply -f labs/k01-insecure-workload/vulnerable.yaml
# ...siga o briefing da missão / dicas no aplicativo web, pegue FLAG{...}, submeta-a...
# aplique a versão corrigida e confirme que o caminho da flag foi fechado
kubectl delete -f labs/k01-insecure-workload/vulnerable.yaml
kubectl apply -f labs/k01-insecure-workload/fixed.yaml
Reinicie tudo entre os desafios com make clean-labs.
cd checker
go run . --list # mostra todos os verificadores
go run . --check k01 # executa um único verificador
go run . --all # escaneia todo o cluster
go run . --all --json # formato legível por máquina (para CI)
go run . --all -n apps # limita a um namespace
O verificador sai com código diferente de zero se alguma verificação falhar, então pode ser usado como gate de CI.
Construa um binário independente:
cd checker
go build -o owasp-k8s-checker . # ou: make checker
./owasp-k8s-checker --all
Cada checker/checks/kNN.go valida o mesmo controle que o laboratório correspondente ensina.
Faça deploy do fixed.yaml, execute go run . --check kNN, e você deve ver PASS.
Faça deploy do vulnerable.yaml e a mesma verificação relata as descobertas específicas.
Segurança: os manifestos vulneráveis são propositalmente exploráveis. Use apenas um cluster local descartável
kind/minikube. Exclua-o quando terminar:kind delete cluster --name owasp-labs.
| 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 |
| 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) |
| ID | Risco | Pasta do laboratório |
|---|
| K01 | Configurações de Carga de Trabalho Inseguras | labs/k01-insecure-workload |
| K02 | Configurações de Autorização Excessivamente Permissivas | labs/k02-authorization |
| K03 | Falhas no Gerenciamento de Segredos | labs/k03-secrets |
| K04 | Falta de Aplicação de Políticas no Nível do Cluster | labs/k04-policy-enforcement |
| K05 | Controles de Segmentação de Rede Ausentes | labs/k05-network-segmentation |
| K06 | Componentes Kubernetes Excessivamente Expostos | labs/k06-exposed-components |
| K07 | Componentes de Cluster Mal Configurados e Vulneráveis | labs/k07-cluster-components |
| K08 | Movimento Lateral do Cluster para a Nuvem | labs/k08-cluster-to-cloud |
| K09 | Mecanismos de Autenticação Quebrados | labs/k09-authentication |
| K10 | Logging e Monitoramento Inadequados | labs/k10-logging-monitoring |
| Bônus | Vulnerabilidades na Cadeia de Suprimento | labs/kbonus-supply-chain |