Локальный одноразовый кластер Kubernetes с намеренно уязвимым компонентом ingress-nginx для отработки атаки и защиты.
| Компонент | Значение |
|---|---|
| Кластер | kind, имя ingressnightmare-lab |
| Уязвимость | CVE-2025-1974 (семейство IngressNightmare) |
| Компонент | ingress-nginx, версия 1.11.0 (уязвима) |
| Namespace | ingress-nginx |
| Фикс-версии | 1.11.5 / 1.12.1 и выше (НЕ установлены) |
Суть уязвимости: недостаточная валидация данных, попадающих в конфигурацию NGINX через admission-контроллер, позволяет неаутентифицированному запросу из pod-сети внедрить директивы и выполнить код в pod'е контроллера, что открывает доступ к секретам кластера.
- Платформа (развёртывание стенда): поднимает и сбрасывает кластер,
гарантирует чистое исходное состояние между раундами. Команда сброса —
./setup.sh. - Атакующие (red): запускают PoC только внутри стенда, не трогают конфигурацию кластера на уровне инфраструктуры.
- Защитники (blue): применяют защиту поверх (см. ниже).
Важно: поменять флаги скриптов на исполняемые файлы
chmod +x setup.sh install-tools.shСтенд рассчитан на Fedora Linux. Порядок на новой машине:
./install-tools.sh # поставит Docker, kind, kubectl, helm (один раз)
# выйти из системы и зайти снова (нужно для группы docker)
docker run hello-world # проверка, что Docker работает без sudo
./setup.sh # поднять стендНа дистрибутиве, отличном от Fedora, шаги установки Docker внутри
install-tools.shбудут другими — скрипт это проверяет и останавливается.
После ./setup.sh доступ к кластеру уже настроен в kubectl (kind
сам прописывает контекст). Проверка:
kubectl get nodes
kubectl get pods -n ingress-nginxPod контроллера должен быть в статусе Running.
Проверить версию (должна быть 1.11.0):
kubectl exec -n ingress-nginx \
$(kubectl get pod -n ingress-nginx -l app.kubernetes.io/component=controller -o name) \
-- /nginx-ingress-controller --version- Платформа:
./setup.sh→ объявляет «стенд чист, версия 1.11.0». - Red: запускает PoC из pod-сети → фиксирует результат (сработало/нет).
- Blue: применяет защиту → фиксирует, что изменилось.
- Red: повторяет тот же PoC → проверка «отбилось / задетектилось».
- Платформа:
./setup.sh→ следующий раунд с чистого состояния.
./setup.sh # снести старый кластер и поднять заново (чистое состояние)
./setup.sh --no-reset # поднять, не удаляя существующий (если кластера ещё нет)Полностью убрать стенд с машины:
kind delete cluster --name ingressnightmare-lab