GCP - Container Privesc

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

houer

houer.clusters.get

Hierdie toestemming maak dit moontlik om geloofsbriewe vir die Kubernetes-houer te versamel deur iets soos die volgende te gebruik:

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

Sonder ekstra toestemmings is die geloofsbriewe redelik basies, aangesien jy net 'n paar hulpbronne kan lys, maar hulle is nuttig om foute konfigurasies in die omgewing te vind.

Let daarop dat kubernetes-klusters ingestel kan word om privaat te wees, wat toegang tot die Kube-API-bediener vanaf die internet sal verbied.

As jy nie hierdie toestemming het nie, kan jy steeds toegang tot die kluster kry, maar jy moet jou eie kubectl-konfigurasie-lêer skep met die klusterinligting. 'n Nuut gegenereerde een lyk soos volg:

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 beginsels in staat is om Rolle en ClusterRoles te skep of by te werk met meer toestemmings as wat die beginsel het. Tog sal 'n GCP beginsel met daardie toestemmings in staat wees om Rolle/ClusterRoles te skep/by te werk met meer toestemmings as wat hy het, en sodoende 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 hierdie voorregverhogingsaksies uit te voer.

container.roles.bind | container.clusterRoles.bind

Kubernetes verhoed standaard dat beginsels in staat is om RoleBindings en ClusterRoleBindings te skep of by te werk met meer toestemmings as wat die beginsel het. Tog sal 'n GCP beginsel met daardie toestemmings in staat wees om RoleBindings/ClusterRoleBindings te skep/by te werk met meer toestemmings as wat hy het, en sodoende 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 hierdie voorregverhogingsaksies 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

Hierdie toestemmings sal jou in staat stel om 'n hulpbron te skep of by te werk waar jy 'n pod kan definieer. Deur 'n pod te definieer, kan jy die SA spesifiseer wat geheg gaan word en die beeld wat uitgevoer gaan word. Jy kan dus 'n beeld uitvoer wat die SA se token na jou bediener uitlek, wat jou in staat stel om na enige diensrekening te verhoog. 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 voorregte in GCP te verhoog (standaard word die rekeningsdiens gebruik).

container.secrets.get | container.secrets.list

Met hierdie toestemmings kan jy die tokkens van al die SAs van Kubernetes lees, so jy kan daarna verhoog.

container.pods.exec

Met hierdie toestemming sal jy in staat wees om in pods uit te voer, wat jou toegang gee tot al die Kubernetes SAs wat in pods loop om voorregte binne K8s te verhoog, maar jy sal ook in staat wees om die GCP-diensrekening van die NodePool te steel en voorregte in GCP te verhoog.

container.pods.portForward

Met hierdie toestemmings kan jy toegang kry tot plaaslike dienste wat in pods loop, wat jou in staat kan stel om voorregte in Kubernetes te verhoog (en in GCP as jy op een of ander manier met die metadata-diens kan kommunikeer).

container.serviceAccounts.createToken

Vanweë die naam van die toestemming, lyk dit asof dit jou sal toelaat om tokkens van die K8s-diensrekeninge te genereer, sodat jy na enige SA binne Kubernetes kan verhoog. Ek kon egter 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 in staat stel om voorregte in Kubernetes te verhoog, maar waarskynlik kan jy dit misbruik om in die cluster te volhard. Vir meer inligting, volg hierdie skakel.

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated