Zurück zu den Updates
New releaseAug 16, 2026

k8scout v0.1.2

Wirf eine einzelne Binärdatei in ein kompromittiertes Kubernetes-Pod und kartiere sofort alle realistischen Angriffspfade zu cluster-admin, node escape, secret theft und cloud IAM takeover.

Teilen

k8scout logo

GitHub stars GitHub forks GitHub issues GitHub license

k8scout

Beta — Eine Single-Binary-Engine für Kubernetes-Angriffspfade für autorisierte Sicherheitsbewertungen.

Setzen Sie es in einen kompromittierten Pod ein, führen Sie es aus und erhalten Sie eine Karte jedes realistischen Eskalationspfades – von Ihrem aktuellen Fußpunkt bis zu Cluster-Admin, Node-Zugriff, Geheimnisdiebstahl und Cloud-IAM-Rollen.


Die Idee

Sie haben RCE in einem Kubernetes-Pod. Und jetzt?

k8scout beantwortet diese Frage. Es entdeckt automatisch, was der Service-Account des kompromittierten Pods tun kann, bildet den RBAC-Graphen ab und verfolgt mehrstufige Angriffspfade von Ihrem genauen Fußpunkt zu hochwertigen Zielen.

Es funktioniert in drei Modi:

  • Offensiver Modus (Standard) — Ausführung von innerhalb eines kompromittierten Pods. Erkennt Ihre Identität, Berechtigungen und alle erreichbaren Eskalationspfade von Ihrer aktuellen Position aus.
  • Reviewer-Modus (--reviewer-mode) — Ausführung mit einem schreibgeschützten SA, um die gesamte Cluster-Angriffsfläche für alle Identitäten zu prüfen.
  • Recon-Modus (--recon) — eine schnelle, ressourcenschonende Untersuchung Ihrer Identität, effektiven Berechtigungen und Ressourcen, die Sie berühren können. Kein Graph oder Pfadfindung. Fügen Sie --bruteforce-ns hinzu, um Namespaces zu entdecken, die Sie nicht clusterweit auflisten können.

Demo

k8scout demo


Was es findet

k8scout erstellt einen gewichteten Berechtigungsgraphen und führt eine Dijkstra-basierte Pfadfindung durch, um realistische mehrstufige Angriffsketten zu entdecken:

  • Pod zu Cluster-Admin — über RBAC-Bindungen, Workload-Mutation oder CRB-Erstellung
  • Container-Escape zum Node — via privilegierte Container, hostPID, hostNetwork, gefährliche Capabilities oder hostPath-Mounts
  • Laterale Bewegung — exec in andere Pods, deren SA-Token stehlen, durch ihre Berechtigungen pivotieren
  • Geheimnis- und Credential-Diebstahl — eingehängte SA-Token, Geheimnisse, Configmaps mit durchgesickerten Credentials, verwaiste Token
  • Cloud-IAM-Eskalation — IRSA (AWS), GKE Workload Identity, Azure Workload Identity, Missbrauch von projizierten Token-Audiences
  • Impersonationsketten — SA-zu-SA-Übernahme durch Impersonationsberechtigungen
  • Workload-Mutation — patchen eines Deployments, um dessen SA zu ändern und dann die Berechtigungen dieser SA zu erben
  • Webhook-Injektion — Kontrolle über mutierende Webhooks, um in zukünftige Workloads zu injizieren
  • GitOps-Operator-Missbrauch — ArgoCD, Flux, External Secrets und Vault-Operator-Rechteausweitung
  • Fehlkonfigurationserkennung — lose Bindungen, Wildcard-Verben, automatisch eingehängte Token, Klartext-Geheimnisse in Env-Variablen

Jeder Fund enthält MITRE ATT&CK-Technik-IDs, eine Risikobewertung und einen schrittweisen Angriffspfad mit den tatsächlich beteiligten Graph-Knoten. Insgesamt 50 Erkennungsregeln.


Schnellstart

Von einem kompromittierten Pod (primärer Anwendungsfall)

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

Das Binary erkennt automatisch, dass es im Cluster läuft, identifiziert den Pod und die SA und beginnt die Pfadfindung von Ihrem genauen Fußpunkt aus.

Beabsichtigte Verwendung: Penetrationstests, Red-Team-Einsätze, interne Sicherheitsüberprüfungen und Cluster-Härtungsaudits. Holen Sie immer die entsprechende Genehmigung ein, bevor Sie es gegen einen Cluster ausführen.

Von Ihrem lokalen Computer

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

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

Recon-Modus (schnelle Berechtigungs- und Ressourcenprüfung)

# 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 überspringt Grapherstellung, Inferenz und KI – es ist der schnellste Weg, um zu beantworten, "was dieses Token eigentlich hat". Es meldet die aktuelle Identität, ihre effektiven Berechtigungen (SelfSubjectRulesReview) und eine ressourcenspezifische Fähigkeitsmatrix (SelfSubjectAccessReview). --bruteforce-ns bestätigt, dass ein Namespace existiert, indem es bekannte Objekte liest, die jeder Namespace hat (das Namespace-Objekt selbst, sein default ServiceAccount oder die kube-root-ca.crt ConfigMap) – nützlich, wenn die Identität keine Namespaces auflisten kann, aber möglicherweise auf bestimmte zugreifen darf.

Reviewer-Modus (vollständige Cluster-Prüfung)

# 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

Mit KI-Erzählung

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

Installation

Vorgefertigte Binaries

Laden Sie sie von der Releases-Seite herunter. Alle Binaries sind statisch gelinkt und haben keine Abhängigkeiten.

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

Aus dem Quellcode erstellen

Erfordert 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

Wie es funktioniert

k8scout (running inside compromised pod)
 |
 ├── 1. Fußpunkt erkennen
 │     Pod-Name (HOSTNAME), SA (TokenReview), Node (downward API)
 │
 ├── 2. Berechtigungen entdecken
 │     SSRR pro Namespace + ~30 gleichzeitige SSAR-Stichproben
 │     (immer erlaubt, kein RBAC nötig)
 │
 ├── 3. Cluster-Objekte aufzählen (gnädige Degradierung bei Verweigerung)
 │     Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs
 │
 ├── 4. Angriffsgraphen erstellen
 │     Knoten: Pods, SAs, Rollen, Bindungen, Secrets, Workloads, Nodes, Cloud-Identitäten
 │     Kanten: runs_as, mounts, authenticates_as, can_exec, can_patch,
 │            can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
 │
 ├── 5. Angriffspfade finden (Dijkstra vom Fußpunkt zu hochwertigen Zielen)
 │     Gewichtet nach Angreiferaufwand – billigste (realistischste) Pfade zuerst
 │     Ziele: Cluster-Admin, Nodes, SA-Token, Cloud IAM, privilegierte Workloads
 │
 ├── 6. Inferenzregeln ausführen (50 Regeln mit MITRE ATT&CK-Zuordnung)
 │
 ├── 7. Optional: KI-Risikoerzählung (GPT-4o)
 │
 └── 8. Ausgabe: Textzusammenfassung + JSON-Bericht

Selbst mit einem minimalen SA, der keine Pods oder RBAC-Objekte auflisten kann, synthetisiert das Tool den Fußpunktgraphen allein aus Identitätsdaten und entdeckt, was über SSRR/SSAR-Berechtigungen erreichbar ist.


Angriffsgraphen-Visualisierung

Laden Sie den JSON-Bericht in web/graph.html in einem beliebigen Browser (Drag & Drop, kein Server nötig).

  • Registerkarte Angriffspfade — nach Risikobewertung geordnet, jeder zeigt die vollständige Multi-Hop-Kette vom Fußpunkt zum Ziel
  • Multi-Ketten-Ansicht — visualisieren Sie überlappende Angriffspfade gleichzeitig auf einem einzigen Graphen
  • Kraftgerichteter Graph — alle Knoten und Kanten mit farbcodierten Kategorien und Risikobewertungsringen
  • Fokus-Modus — blendet strukturelles Rauschen aus, um angriffsrelevante Knoten hervorzuheben
  • RBAC-Umschalter — blendet RBAC-Knoten aus, zeigt sie aber automatisch an, wenn sie Teil eines aktiven Angriffspfades sind
  • Mini-Karte — navigieren Sie in großen Graphen, ohne den Überblick zu verlieren
  • Knotendetails — klicken Sie auf einen Knoten, um Metadaten, Verbindungen und zugehörige Funde anzuzeigen
  • Export — laden Sie einen eigenständigen HTML-Pentestbericht herunter

CLI-Referenz

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

RBAC-Anforderungen

Bei Ausführung von einem kompromittierten Pod: Kein spezielles RBAC nötig. SSRR und SSAR sind immer erlaubt. Das Tool degradiert gnädig, wenn der SA keine Cluster-Objekte auflisten kann – es entdeckt dennoch Berechtigungen und generiert Funde aus dem, was verfügbar ist.

Für vollständige Aufzählung (empfohlen für den k8scout-SA): schreibgeschützter Zugriff, definiert in deploy/rbac.yaml:

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

Geheimniswerte werden niemals gelesen, es sei denn, die Identität hat eine bestätigte GET-Berechtigung über SSAR.


Beta-Feedback

k8scout befindet sich in aktiver Entwicklung. Wenn Sie auf einen Fehler, eine Fehlalarm oder eine Erkennungslücke in Ihrem Cluster stoßen, eröffnen Sie bitte ein Issue. Fehlalarme und übersehene Pfade sind besonders nützlich – fügen Sie nach Möglichkeit das anonymisierte Ergebniss-JSON bei.


Lizenz

MIT

Kategorien