GCP - Container Privesc

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

kontejner

container.clusters.get

Ova dozvola omogućava prikupljanje akreditacija za Kubernetes klaster koristeći nešto poput:

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

Bez dodatnih dozvola, akreditacije su prilično osnovne i možete samo izlistati neke resurse, ali su korisne za pronalaženje grešaka u konfiguraciji okruženja.

Imajte na umu da kubernetes klasteri mogu biti konfigurisani kao privatni, što će onemogućiti pristup Kube-API serveru sa interneta.

Ako nemate ovu dozvolu, i dalje možete pristupiti klasteru, ali morate kreirati svoju vlastitu kubectl konfiguracionu datoteku sa informacijama o klasterima. Novo generisana datoteka 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 podrazumevano onemogućava principale da mogu kreirati ili ažurirati Role i ClusterRole sa više dozvola od onih koje principali imaju. Međutim, GCP principali sa tim dozvolama će biti u mogućnosti da kreiraju/ažuriraju Role/ClusterRole sa više dozvola od onih koje poseduju, efektivno zaobilazeći Kubernetes zaštitu od 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 ovih akcija eskalacije privilegija.

container.roles.bind | container.clusterRoles.bind

Kubernetes podrazumevano onemogućava principale da mogu kreirati ili ažurirati RoleBindings i ClusterRoleBindings kako bi dali više dozvola od onih koje principali imaju. Međutim, GCP principali sa tim dozvolama će biti u mogućnosti da kreiraju/ažuriraju RoleBindings/ClusterRoleBindings sa više dozvola od onih koje imaju, efektivno zaobilazeći Kubernetes zaštitu od 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 ovih 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 specificirati SA koji će biti povezan i sliku koja će biti pokrenuta, što vam omogućava da pokrenete sliku koja će izfiltrirati token SA na vaš server, omogućavajući vam da eskalirate do bilo kog servisnog naloga. Za više informacija pogledajte:

Pošto se nalazimo u GCP okruženju, takođe ćete biti u mogućnosti da dobijete GCP SA nodepoola iz metapodataka i eskališete privilegije u GCP (podrazumevano 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 kubernetesa, tako da možete eskalirati do njih.

container.pods.exec

Sa ovom dozvolom ćete moći da izvršite komandu unutar podova, što vam daje pristup svim Kubernetes SA koji se izvršavaju u podovima kako biste eskalirali privilegije unutar K8s-a, ali takođe ćete moći da ukradete GCP Service Account od NodePoola, eskališući privilegije u GCP-u.

container.pods.portForward

Kao što je objašnjeno na ovoj stranici, sa ovim dozvolama možete pristupiti lokalnim servisima koji se izvršavaju u podovima, što vam može omogućiti da eskališete privilegije u Kubernetesu (i u GCP-u ako nekako uspete da komunicirate sa metapodacima).

container.serviceAccounts.createToken

Zbog naziva dozvole, izgleda da će vam omogućiti da generišete tokene K8s servisnih naloga, tako da ćete moći da eskališete privilegije do bilo kog SA unutar Kubernetesa. Međutim, nisam uspeo da pronađem API endpoint za korišćenje ove dozvole, pa me obavestite ako je pronađete.

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

Ove dozvole mogu vam omogućiti eskalaciju privilegija u Kubernetesu, ali verovatnije je da ih možete zloupotrebiti kako biste uporni u klasteru. Za više informacija pratite ovaj link.

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks:

Last updated