GCP - Container Privesc
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
Ovo dopuštenje omogućava prikupljanje kredencijala za Kubernetes cluster koristeći nešto poput:
Preuzmi kredencijale za Kubernetes cluster
```bash gcloud container clusters get-credentialsBez dodatnih dozvola, kredencijali su prilično osnovni jer možete samo navesti neke resurse, ali su korisni za pronalaženje pogrešnih konfiguracija u okruženju.
Note
Imajte na umu da kubernetes clusters mogu biti konfigurisani kao privatni, što će onemogućiti pristup Kube-API serveru sa Interneta.
Ako nemate ovu dozvolu, i dalje možete pristupiti clusteru, ali morate kreirati sopstveni kubectl config file sa informacijama o clusteru. Novo generisani izgleda ovako:
Primer 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:container.roles.escalate | container.clusterRoles.escalate
Kubernetes po defaultu sprečava subjekte da kreiraju ili ažuriraju Roles i ClusterRoles sa većim privilegijama od onih koje subjekt poseduje. Međutim, GCP subjekt sa tim dozvolama će moći da kreira/ažurira Roles/ClusterRoles sa većim privilegijama nego što je imao, efektivno zaobilazeći Kubernetes zaštitu protiv ovog ponašanja.
container.roles.create i/ili container.roles.update ILI container.clusterRoles.create i/ili container.clusterRoles.update respektivno su takođe neophodne za izvođenje tih akcija eskalacije privilegija.
container.roles.bind | container.clusterRoles.bind
Kubernetes po defaultu sprečava subjekte da kreiraju ili ažuriraju RoleBindings i ClusterRoleBindings kako bi dodelili veće privilegije od onih koje subjekt ima. Međutim, GCP subjekt sa tim dozvolama će moći da kreira/ažurira RolesBindings/ClusterRolesBindings sa većim privilegijama nego što ih ima, efektivno zaobilazeći Kubernetes zaštitu protiv ovog ponašanja.
container.roleBindings.create i/ili container.roleBindings.update ILI container.clusterRoleBindings.create i/ili container.clusterRoleBindings.update respektivno su takođe neophodne 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 u kome možete definisati pod. Definišući pod možete specificirati SA koji će biti prikačen i image koji će biti pokrenut, pa tako možete pokrenuti image koji će eksfiltrirati token SA na vaš server i omogućiti vam eskalaciju na bilo koji Service Account.
Za više informacija pogledajte:
Poš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 objašnjeno na ovoj stranici, sa ovim dozvolama možete čitati tokene svih Kubernetes SA, tako da možete eskalirati na njih.
container.pods.exec
Sa ovom dozvolom moći ćete da exec u pods, što vam daje pristup svim Kubernetes SA koji rade u pod-ovima da eskalirate privilegije unutar K8s, ali takođe ćete moći da ukradete GCP Service Account od NodePool-a, eskalirajući privilegije u GCP.
container.pods.portForward
Kao objašnjeno na ovoj stranici, sa ovom dozvolom možete pristupiti lokalnim servisima koji rade u pods i koji vam mogu omogućiti eskalaciju privilegija u Kubernetes (i u GCP ako, na neki način, uspete da komunicirate sa metadata servisom).
container.serviceAccounts.createToken
Zbog imena dozvole, deluje da će vam omogućiti da generišete tokene K8s Service Account-a, pa biste mogli da privesc na bilo koji SA unutar Kubernetes. Međutim, nisam pronašao nijedan API endpoint za njenu upotrebu, pa javite ako ga nađete.
container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update
Ove dozvole mogu omogućiti eskalaciju privilegija u Kubernetes, ali mnogo verovatnije ih možete zloupotrebiti da biste se persistirali u klasteru.
Za više informacija pogledajte 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.
HackTricks Cloud

