Torna agli aggiornamenti
New releaseAug 16, 2026

k8scout v0.1.2

Inserisci un singolo binario in un pod Kubernetes compromesso e mappa istantaneamente ogni percorso di attacco realistico verso cluster-admin, node escape, secret theft e cloud IAM takeover.

Condividi

k8scout logo

GitHub stars GitHub forks GitHub issues GitHub license

k8scout

Beta — Un motore di percorsi d'attacco Kubernetes a singolo binario per valutazioni di sicurezza autorizzate.

Inseriscilo in un pod compromesso, eseguilo e ottieni una mappa di ogni percorso di escalation realistico — dal tuo punto d'appoggio attuale fino a cluster-admin, accesso ai nodi, furto di segreti e ruoli IAM cloud.


L'idea

Hai RCE in un pod Kubernetes. E ora?

k8scout risponde a questa domanda. Scopre automaticamente cosa può fare il service account del pod compromesso, mappa il grafo RBAC e traccia percorsi d'attacco multi-step dal tuo esatto punto d'appoggio fino a obiettivi di alto valore.

Funziona in tre modalità:

  • Modalità offensiva (predefinita) — eseguita dall'interno di un pod compromesso. Scopre la tua identità, permessi e tutti i percorsi di escalation raggiungibili dalla tua posizione attuale.
  • Modalità revisore (--reviewer-mode) — eseguita con un SA di sola lettura per auditare l'intera superficie d'attacco del cluster per tutte le identità.
  • Modalità ricognizione (--recon) — un rapido sguardo a basso impatto sulla tua identità, permessi effettivi e quali risorse puoi toccare. Nessun grafo o pathfinding. Aggiungi --bruteforce-ns per scoprire namespace che non puoi elencare a livello di cluster.

Demo

k8scout demo


Cosa trova

k8scout costruisce un grafo di permessi pesati ed esegue pathfinding basato su Dijkstra per scoprire catene d'attacco multi-step realistiche:

  • Da pod a cluster-admin — tramite binding RBAC, mutazione dei carichi di lavoro o creazione di CRB
  • Escape dal container al nodo — tramite container privilegiati, hostPID, hostNetwork, capabilities pericolose o mount hostPath
  • Movimento laterale — exec in altri pod, rubare i loro token SA, pivot attraverso i loro permessi
  • Furto di segreti e credenziali — token SA montati, segreti, configmap con credenziali trapelate, token orfani
  • Escalation IAM cloud — IRSA (AWS), GKE Workload Identity, Azure Workload Identity, abuso dell'audience del token proiettato
  • Catene di impersonificazione — takeover da SA a SA tramite permessi di impersonificazione
  • Mutazione del carico di lavoro — patch di un deployment per cambiare il suo SA, poi ereditare i permessi di quel SA
  • Iniezione di webhook — controllo del webhook mutante per iniettare in futuri carichi di lavoro
  • Abuso dell'operatore GitOps — ArgoCD, Flux, External Secrets e escalation dei privilegi dell'operatore Vault
  • Rilevamento di configurazioni errate — binding pendenti, verbi wildcard, token montati automaticamente, segreti in chiaro nelle variabili d'ambiente

Ogni risultato include ID delle tecniche MITRE ATT&CK, un punteggio di rischio e un percorso d'attacco passo-passo con i nodi effettivi del grafo coinvolti. 50 regole di rilevamento in totale.


Avvio rapido

Da un pod compromesso (caso d'uso principale)

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

Il binario rileva automaticamente di essere in esecuzione nel cluster, identifica il pod e il SA, e avvia il pathfinding dal tuo esatto punto d'appoggio.

Uso previsto: Test di penetrazione, operazioni red team, revisioni di sicurezza interne e audit di hardening del cluster. Ottenere sempre l'autorizzazione appropriata prima di eseguirlo contro qualsiasi cluster.

Dalla tua macchina locale

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

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

Modalità ricognizione (controllo rapido di permessi e risorse)

# 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

La ricognizione salta la costruzione del grafo, l'inferenza e l'IA — è il modo più veloce per rispondere "cosa ha effettivamente questo token?". Riporta l'identità corrente, i suoi permessi effettivi (SelfSubjectRulesReview) e una matrice di capacità per risorsa (SelfSubjectAccessReview). --bruteforce-ns conferma l'esistenza di un namespace leggendo oggetti ben noti che ogni namespace ha (l'oggetto namespace, il suo ServiceAccount default o il ConfigMap kube-root-ca.crt) — utile quando l'identità non può elencare i namespace ma potrebbe comunque accedere a specifici.

Modalità revisore (audit completo del cluster)

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

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

Installazione

Binari precompilati

Scarica dalla pagina Releases. Tutti i binari sono collegati staticamente senza dipendenze.

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

Compila dal sorgente

Richiede 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

Come funziona

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

Anche con un SA minimale che non può elencare pod o oggetti RBAC, lo strumento sintetizza il grafo del punto d'appoggio dai soli dati di identità e scopre cosa è raggiungibile tramite i permessi SSRR/SSAR.


Visualizzazione del grafo d'attacco

Carica il report JSON in web/graph.html in qualsiasi browser (trascina e rilascia, nessun server necessario).

  • Scheda Percorsi d'attacco — classificati per punteggio di rischio, ciascuno mostra la catena multi-hop completa dal punto d'appoggio all'obiettivo
  • Vista multi-catena — visualizza percorsi d'attacco sovrapposti simultaneamente su un unico grafo
  • Grafo force-directed — tutti i nodi e gli archi con categorie codificate a colori e anelli di punteggio di rischio
  • Modalità focus — scurisce il rumore strutturale per evidenziare i nodi rilevanti per l'attacco
  • Interruttore RBAC — nasconde i nodi RBAC ma li mostra automaticamente quando fanno parte di un percorso d'attacco attivo
  • Mini-mappa — naviga grafi di grandi dimensioni senza perdere il contesto
  • Dettaglio nodo — clicca su qualsiasi nodo per metadati, connessioni e risultati correlati
  • Esporta — scarica un report HTML per pentest autonomo

Riferimento 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

Requisiti RBAC

Quando eseguito da un pod compromesso: Nessun RBAC speciale necessario. SSRR e SSAR sono sempre consentiti. Lo strumento degrada gradualmente se il SA non può elencare oggetti del cluster — scopre comunque i permessi e genera risultati da ciò che è disponibile.

Per enumerazione completa (raccomandata per il SA k8scout): accesso in sola lettura definito in 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

I valori dei segreti non vengono mai letti a meno che l'identità non abbia confermato il permesso GET tramite SSAR.


Feedback beta

k8scout è in fase di sviluppo attivo. Se incontri un bug, un falso positivo o una lacuna di rilevamento nel tuo cluster, apri un issue. I falsi positivi e i percorsi mancati sono particolarmente utili — includi il JSON anonimizzato del risultato se possibile.


Licenza

MIT

Categorie