Сканирует кластеры Kubernetes из-под любой учётной записи, выявляет опасные разрешения и выстраивает их в многошаговые пути эскалации вплоть до компрометации кластера.
Инструмент для картирования путей атак через RBAC в Kubernetes. Он определяет, что может делать ваша учётная запись, отмечает опасные разрешения и выстраивает их в многошаговые цепочки для компрометации кластера.
Создан для red team и пентестеров.
kube-reaper сканирует кластер Kubernetes от имени любой учётной записи (пользователя, сервисной учётной записи, группы) и выдаёт:
Требуется инструментарий Rust (rustup + stable).
git clone https://github.com/youruser/kube-reaper.git
cd kube-reaper
cargo build --release
Бинарный файл находится в target/release/kube-reaper.
Сборка под musl создаёт полностью статический бинарный файл без зависимостей. Он работает в любой системе Linux x86_64.
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
Бинарный файл находится в 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 пробует следующие методы аутентификации по порядку:
--token + --server — Прямой bearer-токен. Используйте с украденным токеном SA или JWT. Автоматически принимает самоподписанные сертификаты.--kubeconfig / -k — Явный файл kubeconfig. Также читает переменную окружения KUBECONFIG.~/.kube/config.--as-user и --as-group добавляют заголовки имперсонации к любому методу аутентификации. Ваша учётная запись должна иметь глагол impersonate, чтобы это работало.
Флаг --pivot включает рекурсивное переключение учётных записей. Эта функция обнаруживает транзитивные пути атак, переключаясь через учётные данные сервисных учётных записей.
kubernetes.io/service-account-token) и извлекает токен.serviceaccounts/token без ограничений по имени ресурса, он создаёт кратковременные токены через API TokenRequest.--pivot-depth (по умолчанию: 3).Сканирование использует обход в ширину (BFS) для поиска кратчайших путей переключения в первую очередь. Оно останавливается на 50 учётных записях, чтобы предотвратить бесконтрольное сканирование.
Каждая переключённая учётная запись показывает:
Сканер переключения применяет следующие ограничения для предотвращения ложных срабатываний:
apiGroups: ["*"]) учитываются для проверок чтения секретов и создания токенов. Правила в неосновных группах (например, custom.metrics.k8s.io) не подходят.resourceNames не учитываются для создания токенов. Правило, разрешающее создание токена для одной именованной сервисной учётной записи, не то же самое, что неограниченное создание токенов.verbs: ["*"], а не просто любого глагола для resources: ["*"].Вывод в терминал показывает следующие разделы (каждый появляется только при наличии находок):