Volver a actualizaciones
Nuevo releaseAug 16, 2026

k8scout v0.1.2

Coloca un solo binario en un pod de Kubernetes comprometido y mapea instantáneamente todas las rutas de ataque realistas hacia cluster-admin, escape de nodo, robo de secretos y toma de control de IAM en la nube.

Compartir

logotipo de k8scout

GitHub stars GitHub forks GitHub issues GitHub license

k8scout

Beta — Un motor de rutas de ataque de Kubernetes en un solo binario para evaluaciones de seguridad autorizadas.

Colóquelo en un pod comprometido, ejecútelo y obtenga un mapa de cada ruta de escalada realista: desde su punto de apoyo actual hasta administrador del clúster, acceso a nodos, robo de secretos y roles IAM en la nube.


La idea

Tienes RCE en un pod de Kubernetes. ¿Ahora qué?

k8scout responde a esa pregunta. Descubre automáticamente lo que la cuenta de servicio del pod comprometido puede hacer, traza el gráfico RBAC y localiza rutas de ataque de múltiples pasos desde su punto de apoyo exacto hasta objetivos de alto valor.

Funciona en tres modos:

  • Modo ofensivo (por defecto) — se ejecuta desde dentro de un pod comprometido. Descubre tu identidad, permisos y todas las rutas de escalada alcanzables desde tu posición actual.
  • Modo de revisión (--reviewer-mode) — se ejecuta con un SA de solo lectura para auditar la superficie de ataque completa del clúster para todas las identidades.
  • Modo de reconocimiento (--recon) — una revisión rápida y de bajo impacto solo de tu identidad, permisos efectivos y qué recursos puedes tocar. Sin gráfico ni búsqueda de rutas. Añade --bruteforce-ns para descubrir espacios de nombres que no puedas listar a nivel de clúster.

Demostración

demostración de k8scout


Lo que encuentra

k8scout construye un gráfico de permisos ponderado y ejecuta búsqueda de rutas basada en Dijkstra para descubrir cadenas de ataque realistas de múltiples pasos:

  • De pod a administrador del clúster — a través de vinculaciones RBAC, mutación de cargas de trabajo o creación de CRB
  • Escape de contenedor a nodo — mediante contenedores privilegiados, hostPID, hostNetwork, capacidades peligrosas o montajes hostPath
  • Movimiento lateral — ejecutar en otros pods, robar sus tokens SA, pivotar a través de sus permisos
  • Robo de secretos y credenciales — tokens SA montados, secretos, configmaps con credenciales filtradas, tokens huérfanos
  • Escalada IAM en la nube — IRSA (AWS), GKE Workload Identity, Azure Workload Identity, abuso de audiencia de tokens proyectados
  • Cadenas de suplantación — toma de control SA a SA mediante permisos de suplantación
  • Mutación de cargas de trabajo — parchear un despliegue para cambiar su SA, luego heredar los permisos de esa SA
  • Inyección de webhooks — control de webhook mutante para inyectar en cargas de trabajo futuras
  • Abuso de operadores GitOps — escalada de privilegios de operadores ArgoCD, Flux, External Secrets y Vault
  • Detección de configuraciones incorrectas — vinculaciones colgantes, verbos comodín, tokens montados automáticamente, secretos en texto plano en variables de entorno

Cada hallazgo incluye IDs de técnicas MITRE ATT&CK, una puntuación de riesgo y una ruta de ataque paso a paso con los nodos del gráfico reales involucrados. 50 reglas de detección en total.


Inicio rápido

Desde un pod comprometido (caso de uso principal)

# 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!

El binario detecta automáticamente que se ejecuta dentro del clúster, identifica el pod y el SA, y comienza la búsqueda de rutas desde tu punto de apoyo exacto.

Uso previsto: Compromisos de pruebas de penetración, operaciones de equipo rojo, revisiones de seguridad internas y auditorías de endurecimiento de clústeres. Siempre obtén la autorización adecuada antes de ejecutarlo contra cualquier clúster.

Desde tu máquina local

# Uses ~/.kube/config or $KUBECONFIG
k8scout --all-namespaces --out result.json

# Target a single namespace
k8scout --namespace production --out result.json

Modo de reconocimiento (verificación rápida de permisos y recursos)

# 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 omite la construcción de gráficos, inferencia e IA — es la forma más rápida de responder "¿qué tiene realmente este token?". Reporta la identidad actual, sus permisos efectivos (SelfSubjectRulesReview) y una matriz de capacidades por recurso (SelfSubjectAccessReview). --bruteforce-ns confirma que existe un espacio de nombres leyendo objetos conocidos que todo espacio de nombres tiene (el objeto espacio de nombres, su ServiceAccount default o el ConfigMap kube-root-ca.crt) — útil cuando la identidad no puede listar espacios de nombres pero aún puede acceder a algunos específicos.

Modo de revisión (auditoría completa del clúster)

# 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

Con narrativa de IA

export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json

Instalación

Binarios precompilados

Descárgalos desde la página de Lanzamientos. Todos los binarios están enlazados estáticamente y no tienen dependencias.

BinarioPlataforma
k8scout-linux-amd64Linux x86-64
k8scout-linux-arm64Linux ARM64
k8scout-darwin-amd64macOS Intel
k8scout-darwin-arm64macOS Apple Silicon

Compilar desde el código fuente

Requiere 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

Cómo funciona

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

Incluso con un SA mínimo que no puede listar pods ni objetos RBAC, la herramienta sintetiza el gráfico de punto de apoyo solo a partir de los datos de identidad y descubre qué es alcanzable a través de los permisos SSRR/SSAR.


Visualización del gráfico de ataque

Carga el informe JSON en web/graph.html en cualquier navegador (arrastrar y soltar, no se necesita servidor).

  • Pestaña de Rutas de Ataque — clasificadas por puntuación de riesgo, cada una muestra la cadena completa de múltiples saltos desde el punto de apoyo hasta el objetivo
  • Vista de cadenas múltiples — visualiza rutas de ataque superpuestas simultáneamente en un solo gráfico
  • Gráfico dirigido por fuerzas — todos los nodos y aristas con categorías codificadas por colores y anillos de puntuación de riesgo
  • Modo de enfoque — atenúa el ruido estructural para resaltar los nodos relevantes para el ataque
  • Alternancia RBAC — oculta los nodos RBAC pero los muestra automáticamente cuando forman parte de una ruta de ataque activa
  • Minimapa — navega por gráficos grandes sin perder el contexto
  • Detalle de nodo — haz clic en cualquier nodo para ver metadatos, conexiones y hallazgos relacionados
  • Exportar — descarga un informe de pruebas de penetración en HTML autocontenido

Referencia de CLI

k8scout [flags]

Flags:
  --out string            Output JSON file path (default "k8scout-result.json")
  --namespace string      Enumerate a single namespace
  --all-namespaces        Enumerate all accessible namespaces (default true)
  --format string         Output format: text | json (default "text")
  --timeout int           Per-request timeout in seconds (default 60)
  --log-level string      debug | info | warn | error (default "info")
  --kubeconfig string     Path to kubeconfig (auto-detected if not set)
  --reviewer-mode         Full cluster RBAC audit for all identities
  --recon                 Quick recon: identity, permissions (SSRR), accessible resources (SSAR)
  --bruteforce-ns         Bruteforce namespace names to find ones you can't list (use with --recon)
  --ns-wordlist string    Custom namespace wordlist for --bruteforce-ns (defaults to a built-in list)
  --stealth               Skip SSRR/SSAR to reduce audit log footprint
  --skip-ssar             Skip SSAR spot-checks only
  --openai-key string     OpenAI API key (or OPENAI_API_KEY env var)
  --openai-model string   OpenAI model (default "gpt-4o")
  --skip-ai               Skip AI narrative generation

Requisitos RBAC

Cuando se ejecuta desde un pod comprometido: No se necesita RBAC especial. SSRR y SSAR siempre están permitidos. La herramienta se degrada correctamente si el SA no puede listar objetos del clúster — aún descubre permisos y genera hallazgos a partir de lo disponible.

Para una enumeración completa (recomendado para el SA de k8scout): acceso de solo lectura definido en deploy/rbac.yaml:

  • namespaces, nodes: get, list
  • serviceaccounts, secrets (metadata only), configmaps: get, list
  • pods, deployments, daemonsets, statefulsets, jobs, cronjobs: get, list
  • roles, rolebindings, clusterroles, clusterrolebindings: get, list
  • mutatingwebhookconfigurations, validatingwebhookconfigurations: get, list

Los valores de los secretos nunca se leen a menos que la identidad tenga permiso GET confirmado a través de SSAR.


Comentarios sobre la versión Beta

k8scout está en desarrollo activo. Si encuentras un error, un falso positivo o una brecha de detección en tu clúster, por favor abre un issue. Los falsos positivos y las rutas no detectadas son especialmente útiles — incluye el JSON del hallazgo anonimizado si es posible.


Licencia

MIT

Categorías