
Практическая лаборатория capture-the-flag для OWASP Kubernetes Top 10 (2025). Используйте 11 реальных уязвимостей кластера, захватывайте флаги, затем применяйте исправления и проверяйте с помощью автоматической проверки. Запускается локально на kind.
Capture-the-flag, построенное на базе OWASP Kubernetes Top Ten — 2025. Вас наняли для проведения атак (red-team) на NimbusMart — вымышленную компанию электронной коммерции, чей кластер рос быстрее, чем его безопасность. Десять заданий, по одному на каждый риск OWASP (плюс бонус) — эксплуатируйте каждую уязвимость, захватывайте флаг, затем применяйте исправление и подтверждайте его с помощью проверяющего.
Вся вселенная (компания, сервисы, пространства имён, схема флагов) описана в файле labs/NIMBUSMART.md.
Всё работает локально на kind. Никогда не применяйте уязвимые манифесты к реальному кластеру.
Создано @hac01.
Это не набор слайдов — это работающий, уязвимый по замыслу кластер Kubernetes, а также инструменты для атаки, исправления и проверки исправлений. В одиннадцати заданиях вы познакомитесь на практике с:
hostPath и выход из узла (K01).ClusterRole, сервисные аккаунты с избыточными правами и как один украденный токен даёт доступ ко всем секретам (K02, K09).NetworkPolicy (K05).:latest, отправляемые в продакшн (бонус).Для каждого задания вы получаете:
Установите это перед началом. Скрипт настройки проверяет первые четыре пункта и немедленно завершается с понятным сообщением, если что-то отсутствует.
Команды
brewпредназначены для macOS. В Linux используйте ваш пакетный менеджер или приложенные инструкции по ссылкам.
Веб-приложение, терминал в браузере и проверяющий могут работать внутри кластера kind. Одна команда запускает всё и выводит URL:
./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/ Настоящие манифесты K8s по каждому риску (vulnerable.yaml + fixed.yaml + README)
│ ├── NIMBUSMART.md Вселенная: компания, пространства имён, схема флагов
│ └── kind-cluster.yaml Общая конфигурация локального кластера (привязка портов)
├── deploy/ Манифесты платформы внутри кластера (web + terminal + RBAC) + build.sh
├── terminal-server/ Бэкенд WebSocket для терминала в браузере
└── checker/ Бинарник Go, проверяющий кластер на соответствие Top 10
Полезные цели make (make help показывает все):
Каждое задание представляет собой реальную уязвимость в кластере NimbusMart — выберите цель, эксплуатируйте её, захватите флаг, затем исправьте и подтвердите исправление с помощью проверяющего.
Что изменилось с 2022: авторизация (была RBAC) расширена; секреты, сеть, аутентификация и логирование переупорядочены; добавлены Чрезмерно открытые компоненты (K06) и Латеральное перемещение из кластера в облако (K08); неправильно настроенные и устаревшие компоненты объединены в K07; Цепочка поставок перенесена в бонусное задание. Полную карту задание–сервис–уязвимость, сложность и очки (2000 за 10 заданий, +300 бонус) см. в
labs/NIMBUSMART.md.
Предпочитаете запускать интерфейс локально и управлять лабораторными из собственной оболочки? Вы можете соединить компоненты вручную.
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, но шаблон одинаков:
# некоторые задания сначала развёртывают цель (файл на узле, секрет ops и т.д.)
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 | Удаляет все ресурсы лабораторной (сброс между заданиями) |
| ID | Риск | Папка лаборатории |
|---|
| 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 |