Jealbreak, Kubernetes, Kubernetes Jailbreak

Kubernetes Jailbreak: от пода до cluster-admin за 5 шагов

Один скомпрометированный под → неправильный RBAC → cluster-admin за несколько минут. Ни одного CVE, ни одного kernel exploit — только цепочка мисконфигов, которые встречаются в 35%+ реальных кластеров. Buckle up.

Контекст: почему K8s — это клондайк

В марте 2026 CSO Online зафиксировал резкий рост атакующего инструментария под Kubernetes — от привилегий через exposed API-серверы до lateral movement через service meshes. RBAC-мисконфиги по-прежнему ответственны за более чем 35% компрометаций кластеров. Лучшее, что может сказать атакующий про K8s: «Я не взламываю, я просто логинюсь».

Типичная цепочка атаки выглядит так:

Шаг 1: Получаем шелл в поде

Начальный вектор — RCE (Command Injection, SSTI, Log4Shell-подобные). Оказавшись внутри, первым делом читаем автоматически примонтированный ServiceAccount токен:

Внутри JWT ищем sub: system:serviceaccount:default:default — это подтверждает, что под работает от default service account. Этот токен всегда существует, даже если поду API не нужен.

Шаг 2: Энумерация RBAC-привилегий

Скачиваем статичный kubectl прямо в под и проверяем права:

Цель — найти binding, где subjects содержит system:serviceaccount:default:default. Это означает: любой под в default namespace имеет неограниченный доступ к API кластера.

Шаг 3: Разведка через API-сервер

Раз у нас cluster-admin — можно читать всё. Дампим секреты kube-system, ищем kubeconfig файлы и токены более привилегированных SA:

DaemonSet’ы — особая цель: они работают на всех нодах, часто с повышенными привилегиями, и могут стать «трамплином» для прыжка на мастер.

Шаг 4: Деплоим Privileged Pod на Master Node

Главный мув — создаём pod с hostPath: /privileged: true и явно указываем nodeName: master. Полная комбинация флагов — это буквально root на хосте:

Шаг 5: Shell на Master + Дамп etcd

Теперь получаем интерактивный шелл внутри привилегированного пода на мастере и выходим на хост:

Параллельная сессия на мастере покажет идентичный hostname и файлы — полное подтверждение компрометации.

Сводка по цепочке атаки

ШагТехникаМисконфигЦель
1RCE / Container EscapeУязвимое приложениеShell в поде
2SA Token TheftautomountServiceAccountToken: trueJWT токен
3RBAC Enumdefault SA → cluster-adminWildcard права
4Privileged Pod Deployprivileged: true + hostPathMaster Node
5chroot + etcd dumpExposed etcd без authВесь кластер

CVE-2025-4563: NodeRestriction Bypass

Это не чисто мисконфиг — это свежая уязвимость уровня компоненты. Admission controller NodeRestriction корректно валидирует resource claim status при обновлении пода, но не при создании. Скомпрометированная нода может создавать mirror pods, получая доступ к ресурсам, которые ей запрещены. Нужна активированная feature gate DynamicResourceAllocation — включена по умолчанию в K8s 1.31+.

Трамплины: скрытая угроза DaemonSet’ов

CNI-плагины (Cilium, Calico) и мониторинг (Prometheus) работают как DaemonSet на каждой ноде с расширенными правами. Классический Cilium-exploit: обнулить pod capacity других нод → убить cilium-operator → вытащить встроенный мощный токен → добавить себе права через ClusterRole.

Defender Playbook

  • Отключи автомонтирование токенов где они не нужны: automountServiceAccountToken: false в spec пода
  • Никогда не биндь cluster-admin к default SA — это прямой пропуск для любого скомпрометированного пода
  • Запрети privileged containers и hostPath через OPA Gatekeeper или Kyverno политики
  • Аудити RBAC регулярно инструментами rakkesskubeauditrbac-police
  • Включи NodeRestriction admission controller и обнови кластер до патченной версии при CVE-2025-4563
  • Шифруй etcd at rest и закрой порт 2379 от любого доступа кроме API-сервера
  • eBPF-мониторинг runtime через Falco или Cilium Tetragon — детектируй privilege escalation внутри пода в реальном времени
«Kubernetes Jailbreak: от пода до cluster-admin за 5 шагов»

На этомв все. Всем хорошего дня!