GCP - Container Privesc
Reading time: 5 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
container
container.clusters.get
Ova dozvola omogućava prikupljanje kredencijala za Kubernetes klaster koristeći nešto poput:
gcloud container clusters get-credentials <cluster_name> --zone <zone>
Bez dodatnih dozvola, kredencijali su prilično osnovni jer možete samo nabrojati neke resurse, ali su korisni za pronalaženje pogrešnih konfiguracija u okruženju.
note
Imajte na umu da kubernetes klasteri mogu biti konfigurisani da budu privatni, što će onemogućiti pristup Kube-API serveru sa Interneta.
Ako nemate ovu dozvolu, i dalje možete pristupiti klasteru, ali morate napraviti svoj vlastiti kubectl config fajl sa informacijama o klasterima. Novi generisani izgleda ovako:
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 po defaultu sprečava principe da mogu da kreiraju ili ažuriraju Roles i ClusterRoles sa više dozvola nego što ih princip ima. Međutim, GCP princip sa tim dozvolama će moći da kreira/ažurira Roles/ClusterRoles sa više dozvola nego što ih ima, efikasno zaobilazeći zaštitu Kubernetes-a protiv ovog ponašanja.
container.roles.create
i/ili container.roles.update
ili container.clusterRoles.create
i/ili container.clusterRoles.update
su takođe neophodni za izvođenje tih akcija eskalacije privilegija.
container.roles.bind
| container.clusterRoles.bind
Kubernetes po defaultu sprečava principe da mogu da kreiraju ili ažuriraju RoleBindings i ClusterRoleBindings kako bi dali više dozvola nego što ih princip ima. Međutim, GCP princip sa tim dozvolama će moći da kreira/ažurira RoleBindings/ClusterRoleBindings sa više dozvola nego što ih ima, efikasno zaobilazeći zaštitu Kubernetes-a protiv ovog ponašanja.
container.roleBindings.create
i/ili container.roleBindings.update
ili container.clusterRoleBindings.create
i/ili container.clusterRoleBindings.update
su takođe neophodni za izvođenje tih akcija eskalacije privilegija.
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
Sve ove dozvole će vam omogućiti da kreirate ili ažurirate resurs gde možete definisati pod. Definisanjem poda možete navesti SA koji će biti priključen i sliku koja će biti pokrenuta, tako da možete pokrenuti sliku koja će izvući token SA na vaš server, omogućavajući vam da eskalirate na bilo koji servisni nalog.
Za više informacija pogledajte:
Kao što smo u GCP okruženju, takođe ćete moći da dobijete nodepool GCP SA iz metadata servisa i eskalirate privilegije u GCP (po defaultu se koristi compute SA).
container.secrets.get
| container.secrets.list
Kao što je objašnjeno na ovoj stranici, sa ovim dozvolama možete čitati tokene svih SA-ova u Kubernetes-u, tako da možete eskalirati na njih.
container.pods.exec
Sa ovom dozvolom moći ćete da izvršite u podovima, što vam daje pristup svim Kubernetes SA-ovima koji rade u podovima za eskalaciju privilegija unutar K8s, ali takođe ćete moći da ukradete GCP servisni nalog NodePool-a, eskalirajući privilegije u GCP.
container.pods.portForward
Kao što je objašnjeno na ovoj stranici, sa ovim dozvolama možete pristupiti lokalnim servisima koji rade u podovima što može omogućiti da eskalirate privilegije u Kubernetes-u (i u GCP ako nekako uspete da komunicirate sa metadata servisom).
container.serviceAccounts.createToken
Zbog imena dozvole, izgleda da će vam omogućiti da generišete tokene K8s servisnih naloga, tako da ćete moći da eskalirate na bilo koji SA unutar Kubernetes-a. Međutim, nisam mogao da pronađem nijedan API endpoint za korišćenje, pa me obavestite ako ga pronađete.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Ove dozvole bi mogle omogućiti eskalaciju privilegija u Kubernetes-u, ali verovatnije je da biste ih mogli zloupotrebiti da persistirate u klasteru.
Za više informacija pratite ovaj link.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.