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をサポートする

container

container.clusters.get

この権限により、次のような方法でKubernetes クラスターの認証情報を収集できます:

Kubernetes クラスターの認証情報を取得 ```bash gcloud container clusters get-credentials --zone ```

追加の権限がなければ、その資格情報はかなり基本的なもので、リソースを一覧表示するだけの場合が多いですが、環境の設定ミスを見つけるのに役立ちます。

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: cmd-args: config config-helper --format=json cmd-path: gcloud expiry: "2022-12-06T01:13:11Z" expiry-key: "{.credential.token_expiry}" token-key: "{.credential.access_token}" name: gcp ```

container.roles.escalate | container.clusterRoles.escalate

Kubernetes はデフォルトで、プリンシパルが自身が持つ権限よりも多い権限を持つ RolesClusterRoles作成(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 はデフォルトで、プリンシパルが自身の持つ権限より多い権限を付与する RoleBindingsClusterRoleBindings作成(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 のすべての SAstokens読み取る ことができ、それらに対してエスカレーションできます。

container.pods.exec

この権限があれば pods に対して exec でき、pod 内で動作するすべての Kubernetes SAs にアクセスして K8s 内での権限昇格が可能になります。さらに、NodePoolGCP 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をサポートする