アップデート一覧に戻る
New releaseAug 16, 2026

k8scout v0.1.2

単一のバイナリを侵害されたKubernetesポッドにドロップするだけで、cluster-admin、ノードエスケープ、シークレット窃取、クラウドIAM乗っ取りに至るすべての現実的な攻撃パスを即座にマッピングします。

共有

k8scout ロゴ

GitHub スター GitHub フォーク GitHub イシュー GitHub ライセンス

k8scout

ベータ版 — 許可されたセキュリティ評価のためのシングルバイナリ Kubernetes 攻撃パスエンジン。

侵害されたPodにドロップして実行するだけで、現在の足場からクラスタ管理者、ノードアクセス、シークレット窃取、クラウドIAMロールまでの現実的なすべてのエスカレーションパスのマップを取得できます。


概要

Kubernetes PodでRCEを取得しました。次はどうしますか?

k8scoutがその問いに答えます。侵害されたPodのサービスアカウントが何ができるかを自動的に発見し、RBACグラフをマッピングし、現在の足場から高価値ターゲットまでの複数ステップの攻撃パスをトレースします。

次の3つのモードで動作します:

  • 攻撃モード (デフォルト) — 侵害されたPod内で実行します。現在の位置から、自分のID、権限、到達可能なすべてのエスカレーションパスを発見します。
  • レビューモード (--reviewer-mode) — 読み取り専用SAで実行し、すべてのIDに対するクラスタ全体の攻撃面を監査します。
  • 偵察モード (--recon) — 高速でフットプリントの少ないモードで、ID、実効権限、アクセス可能なリソースのみを確認します。グラフやパス検索は行いません。--bruteforce-ns を追加すると、クラスタ全体でリストできない名前空間を発見できます。

デモ

k8scout デモ


検出内容

k8scoutは重み付き権限グラフを構築し、Dijkstraベースのパス検索を実行して、現実的な複数ステップの攻撃チェーンを発見します:

  • Pod から cluster-admin へ — RBACバインディング、ワークロード改変、CRB作成を通じて
  • コンテナ脱出からノードへ — 特権コンテナ、hostPID、hostNetwork、危険なCapability、hostPathマウントを介して
  • 横移動 — 他のPodにexecし、そのSAトークンを盗み、その権限を通じて移動
  • シークレットおよび認証情報の窃取 — マウントされたSAトークン、シークレット、漏洩した認証情報を含むConfigMap、孤立トークン
  • クラウドIAMエスカレーション — IRSA (AWS)、GKE Workload Identity、Azure Workload Identity、プロジェクトトークンのオーディエンス悪用
  • なりすましチェーン — なりすまし権限によるSA間の乗っ取り
  • ワークロード改変 — デプロイメントをパッチしてそのSAを変更し、そのSAの権限を継承
  • Webhookインジェクション — 変更系Webhookを制御して将来のワークロードに注入
  • GitOpsオペレーターの悪用 — ArgoCD、Flux、External Secrets、Vaultオペレーターの権限昇格
  • 設定ミスの検出 — 宙ぶらりんのバインディング、ワイルドカード動詞、自動マウントトークン、環境変数内の平文シークレット

すべての発見には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

Reconモード(権限とリソースの簡易確認)

# 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

Reconはグラフ構築、推論、AIをスキップします。これは「このトークンは実際に何を持っているか」に答える最速の方法です。現在のID、その実効権限(SelfSubjectRulesReview)、およびリソースごとの能力マトリックス(SelfSubjectAccessReview)を報告します。--bruteforce-ns は、すべての名前空間が持つ既知のオブジェクト(名前空間オブジェクト、その default ServiceAccount、または kube-root-ca.crt ConfigMap)を読み取ることで名前空間の存在を確認します。IDが名前空間をリストできないが、特定の名前空間にはアクセスできる可能性がある場合に便利です。

Reviewerモード(クラスタ全体の監査)

# 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

インストール

ビルド済みバイナリ

リリース ページからダウンロードしてください。すべてのバイナリは静的リンクされており、依存関係はありません。

BinaryPlatform
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であっても、このツールはIDデータのみから足場グラフを合成し、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

シークレットの値は、IDがSSARを介してGET権限を確認しない限り、決して読み取られません。


ベータフィードバック

k8scoutは活発に開発されています。クラスタでバグ、誤検出、または検出のギャップに遭遇した場合は、issueを開く してください。誤検出や見逃されたパスは特に有用です – 可能であれば匿名化された発見JSONを含めてください。


ライセンス

MIT

カテゴリ