
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.
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-nshinzu, um Namespaces zu entdecken, die Sie nicht clusterweit auflisten können.
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.
| Binary | Plattform |
|---|---|
k8scout-linux-amd64 | Linux x86-64 |
k8scout-linux-arm64 | Linux ARM64 |
k8scout-darwin-amd64 | macOS Intel |
k8scout-darwin-arm64 | macOS 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, listserviceaccounts,secrets(nur Metadaten),configmaps: get, listpods,deployments,daemonsets,statefulsets,jobs,cronjobs: get, listroles,rolebindings,clusterroles,clusterrolebindings: get, listmutatingwebhookconfigurations,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