从任意身份扫描 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 - 直接 bearer token。与窃取的 SA token 或 JWT 一起使用。自动接受自签名证书。--kubeconfig / -k - 显式 kubeconfig 文件。也会读取 KUBECONFIG 环境变量。~/.kube/config。--as-user 和 --as-group 会向任何身份验证方法添加模拟标头。你的身份必须具有 impersonate 动词才能使其生效。
--pivot 标志启用递归身份跳转。此功能通过服务账户凭据进行跳转,从而发现传递性攻击路径。
kubernetes.io/service-account-token 类型)并提取 token。serviceaccounts/token 的每个命名空间,它通过 TokenRequest API 铸造短期 token。--pivot-depth(默认值:3)。扫描使用 BFS 遍历以首先找到最短的跳转路径。它在 50 个身份处停止,以防止失控扫描。
每个跳转后的身份显示:
跳转扫描器应用这些防护措施以防止误报:
apiGroups: ["*"])才计入 secret 读取和 token 创建检查。非核心组(例如 custom.metrics.k8s.io)中的规则不匹配。resourceNames 的规则不计入 token 创建。允许为一个指定服务账户创建 token 的规则与不受限制的 token 创建不同。verbs: ["*"],而不仅仅是 resources: ["*"] 上的任何动词。终端输出显示这些部分(每个部分仅在有发现时出现):
| 部分 | 内容 |
|---|---|
| Pod 上下文分析 | 逃逸向量、capabilities、云 IMDS、网络、SA token、挂载、环境变量 |
| 攻击路径链 | 多步攻击路径,附带分步说明 |
| 身份跳转图 | 递归身份跳转映射,包含方法、权限和进一步跳转能力 |
| 危险 Pod | 特权容器、主机挂载、运行时套接字、暴露的 secret |
| 暴露的服务 | 可从集群外部访问的 LoadBalancer 和 NodePort 服务 |
| 敏感 ConfigMap | 包含凭据或 secret 的键的 ConfigMap |
| CronJob | 具有危险服务账户权限的定时任务 |
| Secret 分类 | 按类型和攻击价值分类的可访问 secret |
| CRD 攻击面 | 来自已知危险 operator 的自定义资源 |
| DNS 服务发现 | 通过 CoreDNS 查询发现的服务(无需 RBAC) |
| 准入控制器探测 | 针对 6 种危险 Pod 配置的按命名空间 dry-run 结果 |
| 其他身份 | 作为跳转目标的权限过高的身份 |
| 命名空间安全 | 每个命名空间的 PSS 执行状态 |
| 危险权限 | 按严重性划分的单个权限发现 |
| 摘要 | 所有发现类别的计数 |
selfsubjectrulesreviews 的 create 权限(默认授予所有已认证用户)| 扫描模块 | 所需权限 |
|---|---|
| 权限枚举 | selfsubjectrulesreviews(默认授予) |
| 命名空间列表 | list namespaces |
| Pod 枚举 | 目标命名空间中的 list pods |
| Secret 分类 | 目标命名空间中的 list secrets |
| RBAC 图 | list roles, clusterroles, rolebindings, clusterrolebindings |
| CRD 检测 | list customresourcedefinitions |
| 身份跳转 | 目标命名空间中的 list secrets 或 create serviceaccounts/token |
| Pod 上下文 | 无 API 权限(读取本地文件系统和网络) |
如果扫描模块缺少权限,它会报告并继续。任何模块失败都不会停止扫描。
kube-reaper 仅用于授权安全测试、渗透测试工作和防御性安全评估。在扫描任何集群之前,你必须获得适当授权。未经授权访问计算机系统是非法的。作者对滥用此工具不承担任何责任。