Scannt Kubernetes-Cluster aus jeder Identität, markiert gefährliche Berechtigungen und verkettet sie zu mehrstufigen Eskalationspfaden bis zur Kompromittierung des Clusters.
Kubernetes RBAC-Angriffspfad-Mapper. Er ermittelt, was deine Identität tun kann, markiert gefährliche Berechtigungen und verkettet sie zu mehrstufigen Pfaden bis zur Kompromittierung des Clusters.
Entwickelt für Red-Teamer und Penetrationstester.
kube-reaper scannt einen Kubernetes-Cluster aus jeder Identität (Benutzer, Service Account, Gruppe) und erzeugt:
Erfordert eine Rust-Toolchain (rustup + stable).
git clone https://github.com/youruser/kube-reaper.git
cd kube-reaper
cargo build --release
Das Binary befindet sich unter target/release/kube-reaper.
Ein musl-Build erzeugt ein vollständig statisches Binary ohne Abhängigkeiten. Es funktioniert auf jedem Linux-x86_64-System.
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
Das Binary befindet sich unter target/x86_64-unknown-linux-musl/release/kube-reaper (~5,4 MB).
# Copy to a Kubernetes node
scp target/x86_64-unknown-linux-musl/release/kube-reaper user@node:/tmp/
# Copy into a running pod
kubectl cp target/x86_64-unknown-linux-musl/release/kube-reaper mynamespace/mypod:/tmp/kube-reaper
# Scan with current kubeconfig
kube-reaper
# Scan a specific namespace
kube-reaper -n production
# Scan with a stolen SA token
kube-reaper --token <JWT> --server https://10.0.0.1:6443
# Scan as a different user (requires impersonate permissions)
kube-reaper --as-user system:serviceaccount:development:code-server
# Recursive identity pivot (read SA tokens, mint new tokens, map transitive access)
kube-reaper --pivot
# Pivot with custom depth (default: 3)
kube-reaper --pivot --pivot-depth 5
# Show only critical and high findings
kube-reaper -s high
# Output JSON
kube-reaper -o json
# Save JSON report to file
kube-reaper -w results.json
Usage: kube-reaper [OPTIONS]
Options:
-n, --namespace <NAMESPACE> Target namespace (default: all accessible)
-k, --kubeconfig <KUBECONFIG> Path to kubeconfig file
--token <TOKEN> Bearer token (requires --server)
--server <SERVER> API server URL (required with --token)
--as-user <USER> Impersonate a user
--as-group <GROUP> Impersonate a group
--pivot Recursive identity pivot via SA secrets and TokenRequest
--pivot-depth <N> Maximum pivot depth [default: 3]
-o, --output <OUTPUT> Output format [default: terminal] [values: terminal, json]
-w, --write <WRITE> Write JSON results to file
-s, --severity <SEVERITY> Minimum severity [default: low] [values: critical, high, medium, low, info]
--unconventional-only Show only unconventional RBAC abuses
--chains-only Show only attack chains
-h, --help Print help
-V, --version Print version
kube-reaper probiert diese Authentifizierungsmethoden in dieser Reihenfolge aus:
--token + --server - Direkter Bearer-Token. Verwendung mit einem gestohlenen SA-Token oder JWT. Akzeptiert selbstsignierte Zertifikate automatisch.--kubeconfig / -k - Explizite kubeconfig-Datei. Liest auch die Umgebungsvariable KUBECONFIG.~/.kube/config.--as-user und --as-group fügen jeder Authentifizierungsmethode Impersonation-Header hinzu. Deine Identität muss das Verb impersonate besitzen, damit dies funktioniert.
Das Flag --pivot aktiviert rekursives Identitäts-Pivoting. Diese Funktion entdeckt transitive Angriffspfade, indem sie durch Service-Account-Anmeldedaten pivotiert.
kubernetes.io/service-account-token) und extrahiert den Token.serviceaccounts/token ohne Einschränkungen des Ressourcennamens erstellen kann, prägt es kurzlebige Token über die TokenRequest-API.--pivot-depth (Standard: 3).Der Scan verwendet BFS-Traversierung, um die kürzesten Pivot-Pfade zuerst zu finden. Er stoppt bei 50 Identitäten, um unkontrollierte Scans zu verhindern.
Jede pivotierte Identität zeigt:
Der Pivot-Scanner wendet diese Schutzmaßnahmen an, um Fehlalarme zu verhindern:
apiGroups: ["*"]) zählen für Secret-Lese- und Token-Erstellungsprüfungen. Regeln in Nicht-Core-Gruppen (z. B. custom.metrics.k8s.io) stimmen nicht überein.resourceNames zählen nicht für die Token-Erstellung. Eine Regel, die die Token-Erstellung für einen benannten Service Account erlaubt, ist nicht dasselbe wie uneingeschränkte Token-Erstellung.verbs: ["*"], nicht nur irgendein Verb auf resources: ["*"].Die Terminal-Ausgabe zeigt diese Abschnitte (jeder erscheint nur, wenn er Ergebnisse enthält):