GCP - Container Privesc

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

container

container.clusters.get

Hierdie toestemming laat toe om akkrediteer vir die Kubernetes-kluster te versamel deur iets soos:

gcloud container clusters get-credentials <cluster_name> --zone <zone>

Without extra permissions, the credentials are pretty basic as you can net sommige hulpbronne lys, but hey are useful to find miss-configurations in the environment.

Note that kubernetes klusters mag geconfigureer wees om privaat te wees, that will disallow that access to the Kube-API server from the Internet.

If you don't have this permission you can still access the cluster, but you need to skep jou eie kubectl konfigurasie lêer with the clusters info. A new generated one looks like this:

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 verhoed standaard dat principals in staat is om te skep of op te dateer Roles en ClusterRoles met meer toestemmings as wat die principal het. egter, 'n GCP principal met daardie toestemmings sal in staat wees om te skep/op te dateer Roles/ClusterRoles met meer toestemmings as wat hy gehad het, wat effektief die Kubernetes beskerming teen hierdie gedrag omseil.

container.roles.create en/of container.roles.update OF container.clusterRoles.create en/of container.clusterRoles.update is ook nodig om daardie privilige-eskalasie aksies uit te voer.

container.roles.bind | container.clusterRoles.bind

Kubernetes verhoed standaard dat principals in staat is om te skep of op te dateer RoleBindings en ClusterRoleBindings om meer toestemmings te gee as wat die principal het. egter, 'n GCP principal met daardie toestemmings sal in staat wees om te skep/op te dateer RolesBindings/ClusterRolesBindings met meer toestemmings as wat hy het, wat effektief die Kubernetes beskerming teen hierdie gedrag omseil.

container.roleBindings.create en/of container.roleBindings.update OF container.clusterRoleBindings.create en/of container.clusterRoleBindings.update is ook nodig om daardie privilige-eskalasie aksies uit te voer.

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

Al hierdie toestemmings gaan jou toelaat om te skep of op te dateer 'n hulpbron waar jy 'n pod kan definieer. Deur 'n pod te definieer kan jy die SA spesifiseer wat aan die pod gekoppel gaan word en die beeld wat gaan loop, daarom kan jy 'n beeld loop wat die token van die SA na jou bediener gaan ekstrapoleer, wat jou toelaat om na enige diensrekening te eskaleer. Vir meer inligting, kyk:

Aangesien ons in 'n GCP omgewing is, sal jy ook in staat wees om die nodepool GCP SA van die metadata diens te kry en privileges in GCP te eskaleer (standaard word die compute SA gebruik).

container.secrets.get | container.secrets.list

Soos verduidelik op hierdie bladsy, met hierdie toestemmings kan jy die tokens van al die SA's van kubernetes lees, sodat jy na hulle kan eskaleer.

container.pods.exec

Met hierdie toestemming sal jy in staat wees om exec in pods te doen, wat jou toegang gee tot al die Kubernetes SA's wat in pods loop om privilige te eskaleer binne K8s, maar jy sal ook in staat wees om die GCP Service Account van die NodePool te steel, privileges in GCP te eskaleer.

container.pods.portForward

Soos verduidelik op hierdie bladsy, met hierdie toestemmings kan jy toegang kry tot plaaslike dienste wat in pods loop wat jou mag toelaat om privileges in Kubernetes te eskaleer (en in GCP as jy op een of ander manier daarin slaag om met die metadata diens te praat).

container.serviceAccounts.createToken

Vanweë die naam van die toestemming, lyk dit of dit jou sal toelaat om tokens van die K8s Service Accounts te genereer, sodat jy in staat sal wees om privilege te eskaleer na enige SA binne Kubernetes. egter, ek kon nie enige API eindpunt vind om dit te gebruik nie, so laat weet my as jy dit vind.

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

Hierdie toestemmings mag jou toelaat om privilige in Kubernetes te eskaleer, maar waarskynlik kan jy dit misbruik om in die kluster te volhard. Vir meer inligting volg hierdie skakel.

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated