
任意のIDからKubernetesクラスタをスキャンし、危険な権限を検出して、クラスタ侵害に至る多段階の権限昇格パスへと連鎖させます。
Kubernetes RBAC 攻撃パスマッパー。あなたのアイデンティティが何をできるかを発見し、危険な権限にフラグを立て、それらをクラスタ侵害への多段階パスへと連鎖させます。
レッドチーム担当者とペネトレーションテスター向けに構築されています。
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 - 直接ベアラートークン。盗まれた SA トークンや JWT で使用します。自己署名証明書を自動的に受け入れます。--kubeconfig / -k - 明示的な kubeconfig ファイル。KUBECONFIG 環境変数も読み取ります。~/.kube/config。--as-user と --as-group は任意の認証方法に偽装ヘッダーを追加します。これが機能するには、あなたのアイデンティティが impersonate 動詞を持っている必要があります。
--pivot フラグは再帰的アイデンティティピボットを有効にします。この機能は、サービスアカウント認証情報を経由してピボットすることで、推移的な攻撃パスを発見します。
kubernetes.io/service-account-token タイプ)を読み取り、トークンを抽出します。serviceaccounts/token を作成できる各名前空間で、TokenRequest API を介して短命トークンを発行します。--pivot-depth(デフォルト:3)まで繰り返されます。スキャンは BFS トラバーサルを使用して最短のピボットパスを最初に見つけます。暴走スキャンを防ぐため、50 アイデンティティで停止します。
各ピボットされたアイデンティティは以下を表示します:
ピボットスキャナーは誤検知を防ぐために以下のガードを適用します:
apiGroups: ["*"])のルールのみがカウントされます。非コアグループ(例:custom.metrics.k8s.io)のルールは一致しません。resourceNames が設定されたルールはトークン作成にカウントされません。1 つの名前付きサービスアカウントのトークン作成を許可するルールは、無制限のトークン作成とは異なります。verbs: ["*"] を必要とし、resources: ["*"] 上の任意の動詞だけでは不十分です。ターミナル出力は以下のセクションを表示します(各セクションは所見がある場合にのみ表示されます):
| セクション | 内容 |
|---|---|
| Pod Context Analysis | エスケープベクター、ケイパビリティ、クラウド IMDS、ネットワーク、SA トークン、マウント、環境変数 |
| Attack Path Chains | ステップバイステップの手順を含む多段階攻撃パス |
| Identity Pivot Graph | 方法、権限、さらなるピボット能力を含む再帰的アイデンティティピボットマップ |
| Dangerous Pods | 特権コンテナ、ホストマウント、ランタイムソケット、露出したシークレット |
| Exposed Services | クラスタ外部から到達可能な LoadBalancer および NodePort サービス |
| Sensitive ConfigMaps | 認証情報やシークレットを含むキーを持つ ConfigMap |
| CronJobs | 危険なサービスアカウント権限を持つスケジュールされたジョブ |
| Secret Triage | タイプと攻撃価値によって分類されたアクセス可能なシークレット |
| CRD Attack Surface | 既知の危険なオペレーターからのカスタムリソース |
| DNS Service Discovery | CoreDNS クエリで発見されたサービス(RBAC 不要) |
| Admission Controller Probing | 6 つの危険な Pod 設定に対する名前空間ごとのドライラン結果 |
| Other Identities | ピボットターゲットである過剰権限のアイデンティティ |
| Namespace Security | 名前空間ごとの PSS 適用ステータス |
| Dangerous Permissions | 重大度別の個別権限の所見 |
| Summary | すべての所見カテゴリのカウント |
selfsubjectrulesreviews に対する create が必要(デフォルトですべての認証済みユーザーに付与)| スキャンモジュール | 必要な権限 |
|---|---|
| 権限列挙 | selfsubjectrulesreviews(デフォルト付与) |
| 名前空間リスト | list namespaces |
| Pod 列挙 | ターゲット名前空間での list pods |
| シークレットトリアージ | ターゲット名前空間での list secrets |
| RBAC グラフ | list roles, clusterroles, rolebindings, clusterrolebindings |
| CRD 検出 | list customresourcedefinitions |
| アイデンティティピボット | ターゲット名前空間での list secrets または create serviceaccounts/token |
| Pod コンテキスト | API 権限不要(ローカルファイルシステムとネットワークを読み取る) |
スキャンモジュールが権限を欠いている場合、それを報告して続行します。モジュールの失敗がスキャンを停止することはありません。
kube-reaper は、許可されたセキュリティテスト、ペネトレーションテスト契約、および防御的セキュリティ評価専用です。クラスタをスキャンする前に適切な許可を取得する必要があります。コンピュータシステムへの不正アクセスは違法です。作者はこのツールの誤用に対して一切の責任を負いません。