
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.
k8scout
Beta — Un motor de rutas de ataque de Kubernetes de binario único para evaluaciones de seguridad autorizadas.
Colócalo en un pod comprometido, ejecútalo y obtén un mapa de cada ruta de escalada realista, desde tu posición actual hasta cluster-admin, acceso a nodos, robo de secretos y roles de IAM en la nube.
La idea
Tienes RCE en un pod de Kubernetes. ¿Y ahora qué?
k8scout responde a esa pregunta. Descubre automáticamente qué puede hacer la cuenta de servicio del pod comprometido, mapea el grafo RBAC y traza rutas de ataque de varios pasos desde tu posición exacta hasta objetivos de alto valor.
Funciona en tres modos:
- Modo ofensivo (predeterminado) — 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 revisor (
--reviewer-mode) — se ejecuta con una SA de solo lectura para auditar toda la superficie de ataque del clúster para todas las identidades. - Modo reconocimiento (
--recon) — una mirada rápida y de baja huella solo a tu identidad, permisos efectivos y qué recursos puedes tocar. Sin grafo ni búsqueda de rutas. Añade--bruteforce-nspara descubrir namespaces que no puedes listar a nivel de clúster.
Demostración
Qué encuentra
k8scout construye un grafo de permisos ponderado y ejecuta búsqueda de rutas basada en Dijkstra para descubrir cadenas de ataque realistas de varios pasos:
- De pod a cluster-admin — mediante enlaces RBAC, mutación de workloads o creación de CRB
- De escape de contenedor a nodo — mediante contenedores privilegiados, hostPID, hostNetwork, capacidades peligrosas o montajes hostPath
- Movimiento lateral — exec en otros pods, robar sus tokens de SA, pivotar a través de sus permisos
- Robo de secretos y credenciales — tokens de SA montados, secretos, configmaps con credenciales filtradas, tokens huérfanos
- Escalada de 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 de SA a SA mediante permisos de suplantación
- Mutación de workloads — parchear un deployment para cambiar su SA y luego heredar los permisos de esa SA
- Inyección de webhooks — control de webhooks mutantes para inyectar en workloads futuros
- Abuso de operadores GitOps — escalada de privilegios de ArgoCD, Flux, External Secrets y operadores de Vault
- Detección de malas configuraciones — enlaces 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 reales del grafo 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 la SA, y comienza la búsqueda de rutas desde tu posición exacta.
Uso previsto: Pruebas de penetración, operaciones de red team, revisiones de seguridad internas y auditorías de endurecimiento de clústeres. Obtén siempre 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 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
El reconocimiento omite la construcción del grafo, la inferencia y la IA — es la forma más rápida de responder
"¿qué tiene realmente este token?". Informa la identidad actual, sus
permisos efectivos (SelfSubjectRulesReview) y una matriz de capacidades por recurso
(SelfSubjectAccessReview). --bruteforce-ns confirma que un namespace existe
leyendo objetos bien conocidos que todo namespace tiene (el objeto namespace, su
ServiceAccount default, o el ConfigMap kube-root-ca.crt) — útil cuando la
identidad no puede listar namespaces pero aún puede acceder a algunos específicos.
Modo revisor (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 Releases. Todos los binarios están enlazados estáticamente y sin dependencias.
| Binario | Plataforma |
|---|---|
k8scout-linux-amd64 | Linux x86-64 |
k8scout-linux-arm64 | Linux ARM64 |
k8scout-darwin-amd64 | macOS Intel |
k8scout-darwin-arm64 | macOS 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 una SA mínima que no puede listar pods u objetos RBAC, la herramienta sintetiza el grafo de posición desde los datos de identidad por sí sola y descubre qué es alcanzable a través de los permisos SSRR/SSAR.