GCP - Container Privesc
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
container
container.clusters.get
この権限により、次のような方法でKubernetes クラスターの認証情報を収集できます:
Kubernetes クラスターの認証情報を取得
```bash gcloud container clusters get-credentials追加の権限がなければ、その資格情報はかなり基本的なもので、リソースを一覧表示するだけの場合が多いですが、環境の設定ミスを見つけるのに役立ちます。
Note
注: kubernetes clusters がプライベートに構成されている場合があります。その場合、インターネットから Kube-API サーバーへのアクセスは許可されません。
この権限がない場合でもクラスターにアクセスできますが、クラスター情報を使って 自分専用の kubectl config file を作成する 必要があります。新しく生成されたものは次のようになります:
例: kubectl config file for GKE cluster
```yaml apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMRENDQXBTZ0F3SUJBZ0lRRzNaQmJTSVlzeVRPR1FYODRyNDF3REFOQmdrcWhraUc5dzBCQVFzRkFEQXYKTVMwd0t3WURWUVFERXlRMk9UQXhZVEZoWlMweE56ZGxMVFF5TkdZdE9HVmhOaTAzWVdFM01qVmhNR05tTkdFdwpJQmNOTWpJeE1qQTBNakl4T1RJMFdoZ1BNakExTWpFeE1qWXlNekU1TWpSYU1DOHhMVEFyQmdOVkJBTVRKRFk1Ck1ERmhNV0ZsTFRFM04yVXROREkwWmkwNFpXRTJMVGRoWVRjeU5XRXdZMlkwWVRDQ0FhSXdEUVlKS29aSWh2Y04KQVFFQkJRQURnZ0dQQURDQ0FZb0NnZ0dCQU00TWhGemJ3Y3VEQXhiNGt5WndrNEdGNXRHaTZmb0pydExUWkI4Rgo5TDM4a2V2SUVWTHpqVmtoSklpNllnSHg4SytBUHl4RHJQaEhXMk5PczFNMmpyUXJLSHV6M0dXUEtRUmtUWElRClBoMy9MMDVtbURwRGxQK3hKdzI2SFFqdkE2Zy84MFNLakZjRXdKRVhZbkNMMy8yaFBFMzdxN3hZbktwTWdKVWYKVnoxOVhwNEhvbURvOEhUN2JXUTJKWTVESVZPTWNpbDhkdDZQd3FUYmlLNjJoQzNRTHozNzNIbFZxaiszNy90RgpmMmVwUUdFOG90a0VVOFlHQ3FsRTdzaVllWEFqbUQ4bFZENVc5dk1RNXJ0TW8vRHBTVGNxRVZUSzJQWk1rc0hyCmMwbGVPTS9LeXhnaS93TlBRdW5oQ2hnRUJIZTVzRmNxdmRLQ1pmUFovZVI1Qk0vc0w1WFNmTE9sWWJLa2xFL1YKNFBLNHRMVmpiYVg1VU9zMUZIVXMrL3IyL1BKQ2hJTkRaVTV2VjU0L1c5NWk4RnJZaUpEYUVGN0pveXJvUGNuMwpmTmNjQ2x1eGpOY1NsZ01ISGZKRzZqb0FXLzB0b2U3ek05RHlQOFh3NW44Zm5lQm5aVTFnYXNKREZIYVlZbXpGCitoQzFETmVaWXNibWNxOGVPVG9LOFBKRjZ3SURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQWdRd0R3WUQKVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVU5UkhvQXlxY3RWSDVIcmhQZ1BjYzF6Sm9kWFV3RFFZSgpLb1pJaHZjTkFRRUxCUUFEZ2dHQkFLbnp3VEx0QlJBVE1KRVB4TlBNbmU2UUNqZDJZTDgxcC9oeVc1eWpYb2w5CllkMTRRNFVlVUJJVXI0QmJadzl0LzRBQ3ZlYUttVENaRCswZ2wyNXVzNzB3VlFvZCtleVhEK2I1RFBwUUR3Z1gKbkJLcFFCY1NEMkpvZ29tT3M3U1lPdWVQUHNrODVvdWEwREpXLytQRkY1WU5ublc3Z1VLT2hNZEtKcnhuYUVGZAprVVl1TVdPT0d4U29qVndmNUsyOVNCbGJ5YXhDNS9tOWkxSUtXV2piWnZPN0s4TTlYLytkcDVSMVJobDZOSVNqCi91SmQ3TDF2R0crSjNlSjZneGs4U2g2L28yRnhxZWFNdDladWw4MFk4STBZaGxXVmlnSFMwZmVBUU1NSzUrNzkKNmozOWtTZHFBYlhPaUVOMzduOWp2dVlNN1ZvQzlNUk1oYUNyQVNhR2ZqWEhtQThCdlIyQW5iQThTVGpQKzlSMQp6VWRpK3dsZ0V4bnFvVFpBcUVHRktuUTlQcjZDaDYvR0xWWStqYXhuR3lyUHFPYlpNZTVXUDFOUGs4NkxHSlhCCjc1elFvanEyRUpxanBNSjgxT0gzSkxOeXRTdmt4UDFwYklxTzV4QUV0OWxRMjh4N28vbnRuaWh1WmR6M0lCRU8KODdjMDdPRGxYNUJQd0hIdzZtKzZjUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K server: https://34.123.141.28 name: gke_security-devbox_us-central1_autopilot-cluster-1 contexts: - context: cluster: gke_security-devbox_us-central1_autopilot-cluster-1 user: gke_security-devbox_us-central1_autopilot-cluster-1 name: gke_security-devbox_us-central1_autopilot-cluster-1 current-context: gke_security-devbox_us-central1_autopilot-cluster-1 kind: Config preferences: {} users: - name: gke_security-devbox_us-central1_autopilot-cluster-1 user: auth-provider: config: access-token:container.roles.escalate | container.clusterRoles.escalate
Kubernetes はデフォルトで、プリンシパルが自身が持つ権限よりも多い権限を持つ Roles や ClusterRoles を 作成(create) または 更新(update) できないように 制限します。しかし、GCP のプリンシパルがこれらの権限を持っていると、自身が保持しているものより多い権限を持つ Roles/ClusterRoles を作成/更新でき、Kubernetes のこの保護を実質的に回避できます。
container.roles.create および/または container.roles.update、または container.clusterRoles.create および/または container.clusterRoles.update が、それぞれこれらの特権昇格アクションを実行するために さらに必要 です。
container.roles.bind | container.clusterRoles.bind
Kubernetes はデフォルトで、プリンシパルが自身の持つ権限より多い権限を付与する RoleBindings や ClusterRoleBindings を 作成(create) または 更新(update) できないように 制限します。しかし、GCP のプリンシパルがこれらの権限を持っていると、自身が持つ権限より多い権限を持つ RoleBindings/ClusterRoleBindings を作成/更新でき、Kubernetes の保護を回避できます。
container.roleBindings.create および/または container.roleBindings.update、または container.clusterRoleBindings.create および/または container.clusterRoleBindings.update が、それぞれこれらの特権昇格を行うために必要です。
container.cronJobs.create | container.cronJobs.update | container.daemonSets.create | container.daemonSets.update | container.deployments.create | container.deployments.update | container.jobs.create | container.jobs.update | container.pods.create | container.pods.update | container.replicaSets.create | container.replicaSets.update | container.replicationControllers.create | container.replicationControllers.update | container.scheduledJobs.create | container.scheduledJobs.update | container.statefulSets.create | container.statefulSets.update
これらの権限はすべて、pod を定義できるリソースを 作成または更新 することを可能にします。pod を定義する際にアタッチされる SA と実行する image を指定できるため、SA の token を外部サーバへ exfiltrate するようなイメージを実行して、任意の Service Account にエスカレーションすることが可能です。
For more information check:
GCP 環境にいる場合、metadata サービスから nodepool GCP SA を取得して、GCP における権限をエスカレートすることもできます(デフォルトでは compute SA が使用されます)。
container.secrets.get | container.secrets.list
As explained in this page, これらの権限があれば、Kubernetes のすべての SAs の tokens を 読み取る ことができ、それらに対してエスカレーションできます。
container.pods.exec
この権限があれば pods に対して exec でき、pod 内で動作するすべての Kubernetes SAs にアクセスして K8s 内での権限昇格が可能になります。さらに、NodePool の GCP Service Account を盗み、GCP での権限をエスカレートすることもできます。
container.pods.portForward
このページで説明されているように、これらの権限があれば pod 内で動作しているローカルサービスにアクセスでき、それにより Kubernetes(場合によっては metadata サービスに到達できれば GCP)での権限昇格につながる可能性があります。
container.serviceAccounts.createToken
権限名からは、K8s Service Accounts の token を生成できるように見えるため、Kubernetes 内の任意の SA に対して privesc できそうに思えます。しかし、それを利用する API エンドポイントは見つかりませんでした。見つけたら教えてください。
container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update
これらの権限は Kubernetes での権限昇格を引き起こす可能性がありますが、より現実的にはクラスタ内に persist するために悪用される可能性が高いです。
For more information follow this link.
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks Cloud

