Escaneia clusters Kubernetes a partir de qualquer identidade, sinaliza permissões perigosas e as encadeia em caminhos de escalação de múltiplas etapas até o comprometimento do cluster.
Mapeador de caminhos de ataque de RBAC do Kubernetes. Ele descobre o que sua identidade pode fazer, sinaliza permissões perigosas e as encadeia em caminhos de múltiplas etapas até o comprometimento do cluster.
Feito para red teamers e testadores de penetração.
O kube-reaper escaneia um cluster Kubernetes a partir de qualquer identidade (usuário, service account, grupo) e produz:
Requer uma toolchain Rust (rustup + stable).
git clone https://github.com/youruser/kube-reaper.git
cd kube-reaper
cargo build --release
O binário está em target/release/kube-reaper.
Uma build musl produz um binário totalmente estático sem dependências. Funciona em qualquer sistema Linux x86_64.
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
O binário está em 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
O kube-reaper tenta estes métodos de autenticação na seguinte ordem:
--token + --server - Bearer token direto. Use com um token de SA roubado ou JWT. Aceita certificados autoassinados automaticamente.--kubeconfig / -k - Arquivo kubeconfig explícito. Também lê a variável de ambiente KUBECONFIG.~/.kube/config.--as-user e --as-group adicionam cabeçalhos de impersonation a qualquer método de autenticação. Sua identidade deve ter o verbo impersonate para que isso funcione.
A flag --pivot habilita o pivotamento recursivo de identidade. Esse recurso descobre caminhos de ataque transitivos ao pivotar por meio de credenciais de service account.
kubernetes.io/service-account-token) e extrai o token.serviceaccounts/token sem restrições de nome de recurso, ele emite tokens de curta duração via API TokenRequest.--pivot-depth (padrão: 3).O scan usa travessia BFS para encontrar primeiro os caminhos de pivot mais curtos. Ele para em 50 identidades para evitar scans descontrolados.
Cada identidade pivotada mostra:
O scanner de pivot aplica estas proteções para evitar falsos positivos:
apiGroups: ["*"]) contam para verificações de leitura de secret e criação de token. Regras em grupos não-core (por exemplo, custom.metrics.k8s.io) não correspondem.resourceNames definido não contam para criação de token. Uma regra que permite criação de token para uma service account nomeada não é o mesmo que criação de token irrestrita.verbs: ["*"], não apenas qualquer verbo em resources: ["*"].A saída do terminal mostra estas seções (cada uma aparece apenas quando tem descobertas):