返回更新列表
新发布Aug 16, 2026

k8scout v0.1.2

将一个单一的二进制文件放入一个被攻破的Kubernetes pod中,立即映射出所有现实的攻击路径:集群管理员、节点逃逸、秘密窃取和云IAM接管。

分享

k8scout logo

GitHub stars GitHub forks GitHub issues GitHub license

k8scout

Beta — 一个用于授权安全评估的单二进制 Kubernetes 攻击路径引擎。

将其放入被攻陷的 Pod 中,运行它,即可获得从当前立足点到 cluster-admin、节点访问、密钥窃取和云 IAM 角色的所有现实提权路径图。


设计理念

你在一个 Kubernetes Pod 中获得了 RCE。接下来呢?

k8scout 回答了这个问题。它会自动发现被攻陷 Pod 的服务账户能做什么,绘制 RBAC 图,并追踪从你的确切立足点到高价值目标的多步攻击路径。

它有三种工作模式:

  • 攻击模式(默认)—— 在被攻陷的 Pod 内部运行。发现你的身份、权限以及从当前位置可达的所有提权路径。
  • 审计模式(--reviewer-mode)—— 使用只读 SA 运行,审计所有身份的完整集群攻击面。
  • 侦察模式(--recon)—— 快速、低痕迹地查看你的身份、有效权限以及可触及的资源。不构建图或路径查找。添加 --bruteforce-ns 可发现你无法在集群范围列出的命名空间。

演示

k8scout demo


它能发现什么

k8scout 构建加权权限图,并运行基于 Dijkstra 的路径查找,以发现现实的多步攻击链:

  • Pod 到 cluster-admin —— 通过 RBAC 绑定、工作负载变更或创建 CRB
  • 容器逃逸到节点 —— 通过特权容器、hostPID、hostNetwork、危险 capabilities 或 hostPath 挂载
  • 横向移动 —— exec 进入其他 Pod,窃取其 SA 令牌,通过其权限进行跳板
  • 密钥和凭据窃取 —— 挂载的 SA 令牌、secrets、包含泄露凭据的 configmaps、孤立令牌
  • 云 IAM 提权 —— IRSA (AWS)、GKE Workload Identity、Azure Workload Identity、投影令牌受众滥用
  • 模拟链 —— 通过模拟权限进行 SA 到 SA 的接管
  • 工作负载变更 —— 修补 deployment 以更改其 SA,然后继承该 SA 的权限
  • Webhook 注入 —— 通过 mutating webhook 控制注入到未来的工作负载中
  • GitOps operator 滥用 —— ArgoCD、Flux、External Secrets 和 Vault operator 提权
  • 错误配置检测 —— 悬空绑定、通配符动词、自动挂载令牌、环境变量中的明文密钥

每个发现都包含 MITRE ATT&CK 技术 ID、风险评分,以及包含实际图节点的逐步攻击路径。共 50 条检测规则。


快速开始

从被攻陷的 Pod 中(主要用例)

# Copy the binary into the pod
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout

# Run it
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json

# Pull the results
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json

# This flow works exactly like this in you're revshell!

该二进制文件会自动检测它正在集群内运行,识别 Pod 和 SA,并从你的确切立足点开始路径查找。

预期用途:渗透测试项目、红队行动、内部安全审查和集群加固审计。在对任何集群运行之前,请务必获得适当授权。

从本地机器

# Uses ~/.kube/config or $KUBECONFIG
k8scout --all-namespaces --out result.json

# Target a single namespace
k8scout --namespace production --out result.json

侦察模式(快速权限和资源检查)

# Who am I, what can I do, and what resources can I access?
k8scout --recon

# Discover namespaces you can't list cluster-wide (built-in wordlist)
k8scout --recon --bruteforce-ns

# Bruteforce with your own namespace wordlist (one name per line)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt

侦察模式跳过图构建、推理和 AI —— 这是回答 "这个令牌实际拥有什么?"的最快方式。它报告当前身份、其 有效权限(SelfSubjectRulesReview),以及按资源划分的能力 矩阵(SelfSubjectAccessReview)。--bruteforce-ns 通过读取每个命名空间都有的 知名对象(命名空间对象、其 default ServiceAccount 或 kube-root-ca.crt ConfigMap)来确认命名空间存在 —— 当 身份无法列出命名空间但仍可能访问特定命名空间时非常有用。

审计模式(完整集群审计)

# Deploy the read-only RBAC and job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml

# Or run directly with reviewer permissions
k8scout --reviewer-mode --all-namespaces --out result.json

使用 AI 叙述

export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json

安装

预构建二进制文件

从 Releases 页面下载。所有二进制文件均为静态链接,无依赖。

二进制文件平台
k8scout-linux-amd64Linux x86-64
k8scout-linux-arm64Linux ARM64
k8scout-darwin-amd64macOS Intel
k8scout-darwin-arm64macOS Apple Silicon

从源码构建

需要 Go 1.22+。

git clone https://github.com/hac01/k8scout
cd k8scout
make build          # native binary
make build-linux    # static Linux amd64 binary
make build-all      # all four release targets

工作原理

k8scout (running inside compromised pod)
 |
 ├── 1. Detect foothold
 │     Pod name (HOSTNAME), SA (TokenReview), Node (downward API)
 │
 ├── 2. Discover permissions
 │     SSRR per namespace + ~30 concurrent SSAR spot-checks
 │     (always permitted, no RBAC needed)
 │
 ├── 3. Enumerate cluster objects (graceful degradation if denied)
 │     Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs
 │
 ├── 4. Build attack graph
 │     Nodes: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities
 │     Edges: runs_as, mounts, authenticates_as, can_exec, can_patch,
 │            can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
 │
 ├── 5. Find attack paths (Dijkstra from foothold to high-value targets)
 │     Weighted by attacker effort — cheapest (most realistic) paths first
 │     Targets: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads
 │
 ├── 6. Run inference rules (50 rules with MITRE ATT&CK mapping)
 │
 ├── 7. Optional: AI risk narrative (GPT-4o)
 │
 └── 8. Output: text summary + JSON report

即使使用无法列出 Pod 或 RBAC 对象的最小 SA,该工具也能仅从身份数据合成立足点图,并发现通过 SSRR/SSAR 权限可达的内容。


攻击图可视化

将 JSON 报告加载到任何浏览器中的 web/graph.html(拖放,无需服务器)。

  • 攻击路径选项卡 —— 按风险评分排序,每个显示从立足点到目标的完整多跳链
  • 多链视图 —— 在单个图上同时可视化重叠的攻击路径
  • 力导向图 —— 所有节点和边,带有颜色编码类别和风险评分环
  • 聚焦模式 —— 淡化结构噪声以突出攻击相关节点
  • RBAC 切换 —— 隐藏 RBAC 节点,但当它们是活动攻击路径的一部分时自动显示
  • 小地图 —— 在不丢失上下文的情况下导航大型图
  • 节点详情 —— 点击任何节点查看元数据、连接和相关发现
  • 导出 —— 下载自包含的 HTML 渗透测试报告

CLI 参考

k8scout [flags]

Flags:
  --out string            Output JSON file path (default "k8scout-result.json")
  --namespace string      Enumerate a single namespace
  --all-namespaces        Enumerate all accessible namespaces (default true)
  --format string         Output format: text | json (default "text")
  --timeout int           Per-request timeout in seconds (default 60)
  --log-level string      debug | info | warn | error (default "info")
  --kubeconfig string     Path to kubeconfig (auto-detected if not set)
  --reviewer-mode         Full cluster RBAC audit for all identities
  --recon                 Quick recon: identity, permissions (SSRR), accessible resources (SSAR)
  --bruteforce-ns         Bruteforce namespace names to find ones you can't list (use with --recon)
  --ns-wordlist string    Custom namespace wordlist for --bruteforce-ns (defaults to a built-in list)
  --stealth               Skip SSRR/SSAR to reduce audit log footprint
  --skip-ssar             Skip SSAR spot-checks only
  --openai-key string     OpenAI API key (or OPENAI_API_KEY env var)
  --openai-model string   OpenAI model (default "gpt-4o")
  --skip-ai               Skip AI narrative generation

RBAC 要求

从被攻陷的 Pod 中运行时:无需特殊 RBAC。SSRR 和 SSAR 始终被允许。如果 SA 无法列出集群对象,该工具会优雅降级 —— 它仍会发现权限并根据可用内容生成发现。

用于完整枚举(推荐用于 k8scout SA):deploy/rbac.yaml 中定义的只读访问权限:

  • namespaces、nodes:get、list
  • serviceaccounts、secrets(仅元数据)、configmaps:get、list
  • pods、deployments、daemonsets、statefulsets、jobs、cronjobs:get、list
  • roles、rolebindings、clusterroles、clusterrolebindings:get、list
  • mutatingwebhookconfigurations、validatingwebhookconfigurations:get、list

除非身份已通过 SSAR 确认 GET 权限,否则永远不会读取 Secret 值。


Beta 反馈

k8scout 正在积极开发中。如果你在你的集群中遇到 bug、误报或检测缺口,请提交 issue。误报和遗漏路径尤其有用 —— 如果可能,请包含匿名化的发现 JSON。


许可证

MIT

分类