GCP - コンテナ特権昇格
Reading time: 8 minutes
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.clusters.get
この権限は、次のような方法でKubernetes クラスターの資格情報を収集することを許可します:
gcloud container clusters get-credentials <cluster_name> --zone <zone>
権限がなくても、資格情報は非常に基本的で、いくつかのリソースをリストすることができますが、環境内の設定ミスを見つけるのに役立ちます。
note
Kubernetes クラスターはプライベートに設定されている可能性があるため、インターネットから Kube-API サーバーへのアクセスが禁止されます。
この権限がない場合でもクラスターにアクセスできますが、クラスターの情報を含む独自の kubectl 設定ファイルを作成する必要があります。新しく生成されたものは次のようになります:
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: <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はデフォルトで、プリンシパルがRolesやClusterRolesをより多くの権限で作成または更新することを防ぎます。しかし、権限を持つ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をより多くの権限で作成または更新することを防ぎます。しかし、権限を持つGCPのプリンシパルは、実際には自分が持っている権限よりも多くの権限を持つRolesBindings/ClusterRolesBindingsを作成/更新することができ、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を添付し、実行するイメージを指定できるため、SAのトークンをあなたのサーバーにエクスフィルトレートするイメージを実行することができ、任意のサービスアカウントに昇格することができます。
詳細については、次を確認してください:
GCP環境にいるため、メタデータサービスからノードプールGCP SAを取得し、GCPで権限を昇格することもできます(デフォルトではコンピュートSAが使用されます)。
container.secrets.get
| container.secrets.list
このページで説明されているように、これらの権限を使用すると、すべてのKubernetesのSAのトークンを読み取ることができるため、それらに昇格することができます。
container.pods.exec
この権限を持つことで、podにexecすることができ、KubernetesのSAにアクセスしてK8s内で権限を昇格させることができますが、NodePoolのGCPサービスアカウントをも盗むことができ、GCPで権限を昇格させることができます。
container.pods.portForward
このページで説明されているように、これらの権限を使用すると、podで実行されているローカルサービスにアクセスでき、Kubernetesで権限を昇格させることができるかもしれません(そして、GCPでメタデータサービスにアクセスできる場合)。
container.serviceAccounts.createToken
権限の名前から、K8sサービスアカウントのトークンを生成することを許可するように見えますので、Kubernetes内の任意のSAに昇格することができるでしょう。しかし、使用するAPIエンドポイントを見つけることができなかったので、見つけたら教えてください。
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
これらの権限はKubernetesで権限を昇格させることを可能にするかもしれませんが、より可能性が高いのは、クラスターに持続するために悪用することができるかもしれません。
詳細については、このリンクを参照してください。
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を提出してハッキングトリックを共有してください。