
k8scout v0.1.2
Разместите один бинарный файл в скомпрометированном поде Kubernetes и мгновенно получите карту всех реалистичных путей атаки до кластерного администратора, ухода из узла (node escape), кражи секретов и захвата облачного IAM.
k8scout
Beta — Однобинарный движок для построения путей атаки в Kubernetes, предназначенный для авторизованных проверок безопасности.
Загрузите его в скомпрометированный под, запустите — и получите карту всех реалистичных путей эскалации: от вашей текущей точки опоры до cluster-admin, доступа к узлам, кражи секретов и ролей cloud IAM.
Идея
У вас есть RCE в поде Kubernetes. Что дальше?
k8scout отвечает на этот вопрос. Он автоматически определяет, что может делать service account скомпрометированного пода, строит граф RBAC и прослеживает многошаговые пути атаки от вашей точной точки опоры до высокоценных целей.
Он работает в трёх режимах:
- Offensive mode (по умолчанию) — запуск изнутри скомпрометированного пода. Определяет вашу идентичность, разрешения и все достижимые пути эскалации из текущей позиции.
- Reviewer mode (
--reviewer-mode) — запуск с read-only SA для аудита всей поверхности атаки кластера для всех идентичностей. - Recon mode (
--recon) — быстрый, малозаметный обзор только вашей идентичности, эффективных разрешений и ресурсов, к которым у вас есть доступ. Без графа и поиска путей. Добавьте--bruteforce-ns, чтобы обнаружить пространства имён, которые вы не можете перечислить на уровне всего кластера.
Демо
Что он находит
k8scout строит взвешенный граф разрешений и запускает поиск путей на основе алгоритма Дейкстры для обнаружения реалистичных многошаговых цепочек атак:
- От пода до cluster-admin — через привязки RBAC, мутацию рабочих нагрузок или создание CRB
- Побег из контейнера на узел — через привилегированные контейнеры, hostPID, hostNetwork, опасные capabilities или монтирования hostPath
- Боковое перемещение — exec в другие поды, кража их SA-токенов, пивотинг через их разрешения
- Кража секретов и учётных данных — смонтированные SA-токены, секреты, configmaps с утёкшими учётными данными, осиротевшие токены
- Эскалация cloud IAM — IRSA (AWS), GKE Workload Identity, Azure Workload Identity, злоупотребление audience проекционных токенов
- Цепочки имперсонации — захват SA через SA с помощью разрешений на имперсонацию
- Мутация рабочих нагрузок — патч deployment для смены его SA с последующим наследованием разрешений этого SA
- Инъекция через webhook — контроль над mutating webhook для внедрения в будущие рабочие нагрузки
- Злоупотребление GitOps-операторами — эскалация привилегий ArgoCD, Flux, External Secrets и Vault operator
- Обнаружение ошибок конфигурации — висячие привязки, wildcard-глаголы, автоматически монтируемые токены, секреты в открытом виде в переменных окружения
Каждая находка включает идентификаторы техник MITRE ATT&CK, оценку риска и пошаговый путь атаки с фактическими узлами графа. Всего 50 правил обнаружения.
Быстрый старт
Из скомпрометированного пода (основной сценарий использования)
# Copy the binary into the pod
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout
# Run it
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json
# Pull the results
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json
# This flow works exactly like this in you're revshell!
Бинарник автоматически определяет, что работает внутри кластера, идентифицирует под и SA и начинает поиск путей от вашей точной точки опоры.
Назначение: Пентесты, операции red team, внутренние проверки безопасности и аудит защищённости кластера. Всегда получайте надлежащее разрешение перед запуском против любого кластера.
С вашей локальной машины
# Uses ~/.kube/config or $KUBECONFIG
k8scout --all-namespaces --out result.json
# Target a single namespace
k8scout --namespace production --out result.json
Recon mode (быстрая проверка разрешений и ресурсов)
# Who am I, what can I do, and what resources can I access?
k8scout --recon
# Discover namespaces you can't list cluster-wide (built-in wordlist)
k8scout --recon --bruteforce-ns
# Bruteforce with your own namespace wordlist (one name per line)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt
Recon пропускает построение графа, выводы и AI — это самый быстрый способ ответить
на вопрос «что на самом деле есть у этого токена?». Он сообщает текущую идентичность,
её эффективные разрешения (SelfSubjectRulesReview) и матрицу возможностей по ресурсам
(SelfSubjectAccessReview). --bruteforce-ns подтверждает существование пространства имён
путём чтения общеизвестных объектов, которые есть в каждом пространстве имён (объект
namespace, его ServiceAccount default или ConfigMap kube-root-ca.crt) — полезно,
когда идентичность не может перечислить пространства имён, но всё ещё может получить
доступ к конкретным из них.
Reviewer mode (полный аудит кластера)
# Deploy the read-only RBAC and job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml
# Or run directly with reviewer permissions
k8scout --reviewer-mode --all-namespaces --out result.json
С AI-описанием
export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json
Установка
Готовые бинарники
Скачайте со страницы Releases. Все бинарники статически слинкованы и не имеют зависимостей.
| Binary | Platform |
|---|---|
k8scout-linux-amd64 | Linux x86-64 |
k8scout-linux-arm64 | Linux ARM64 |
k8scout-darwin-amd64 | macOS Intel |
k8scout-darwin-arm64 | macOS Apple Silicon |
Сборка из исходников
Требуется Go 1.22+.
git clone https://github.com/hac01/k8scout
cd k8scout
make build # native binary
make build-linux # static Linux amd64 binary
make build-all # all four release targets
Как это работает
k8scout (running inside compromised pod)
|
├── 1. Detect foothold
│ Pod name (HOSTNAME), SA (TokenReview), Node (downward API)
│
├── 2. Discover permissions
│ SSRR per namespace + ~30 concurrent SSAR spot-checks
│ (always permitted, no RBAC needed)
│
├── 3. Enumerate cluster objects (graceful degradation if denied)
│ Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs
│
├── 4. Build attack graph
│ Nodes: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities
│ Edges: runs_as, mounts, authenticates_as, can_exec, can_patch,
│ can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
│
├── 5. Find attack paths (Dijkstra from foothold to high-value targets)
│ Weighted by attacker effort — cheapest (most realistic) paths first
│ Targets: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads
│
├── 6. Run inference rules (50 rules with MITRE ATT&CK mapping)
│
├── 7. Optional: AI risk narrative (GPT-4o)
│
└── 8. Output: text summary + JSON report
Даже при минимальном SA, который не может перечислять поды или объекты RBAC, инструмент синтезирует граф точки опоры только из данных идентичности и обнаруживает, что достижимо через разрешения SSRR/SSAR.
Визуализация графа атаки
Загрузите JSON-отчёт в web/graph.html в любом браузере (перетаскиванием, сервер не нужен).