GCP - Container Privesc

Support HackTricks

container

container.clusters.get

Ruhusa hii inaruhusu kusanya akreditivu za kundi la Kubernetes kwa kutumia kitu kama:

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

Bila ruhusa za ziada, akreditivu ni za msingi sana kwani unaweza tu kuorodhesha baadhi ya rasilimali, lakini ni muhimu kupata makosa ya usanidi katika mazingira.

Kumbuka kwamba vikundi vya kubernetes vinaweza kuandaliwa kuwa binafsi, ambavyo vitakataa ufikiaji wa Kube-API server kutoka kwa Mtandao.

Ikiwa huna ruhusa hii bado unaweza kufikia kundi, lakini unahitaji kuunda faili yako ya usanidi ya kubectl yenye taarifa za vikundi. Faili mpya iliyoundwa inaonekana kama hii:

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 kwa kawaida inaepusha wahusika kuwa na uwezo wa kuunda au kupdate Roles na ClusterRoles zenye idhini zaidi kuliko zile ambazo wahusika wanazo. Hata hivyo, wahusika wa GCP wenye ruhusa hizo wataweza kuunda/kupdate Roles/ClusterRoles zenye idhini zaidi kuliko zile walizonazo, hivyo kuweza kupita ulinzi wa Kubernetes dhidi ya tabia hii.

container.roles.create na/au container.roles.update AU container.clusterRoles.create na/au container.clusterRoles.update kwa mtiririko huo pia ni zaidi zinahitajika ili kutekeleza vitendo hivyo vya kupandisha hadhi.

container.roles.bind | container.clusterRoles.bind

Kubernetes kwa kawaida inaepusha wahusika kuwa na uwezo wa kuunda au kupdate RoleBindings na ClusterRoleBindings ili kutoa idhini zaidi kuliko zile ambazo wahusika wanazo. Hata hivyo, wahusika wa GCP wenye ruhusa hizo wataweza kuunda/kupdate RolesBindings/ClusterRolesBindings zenye idhini zaidi kuliko zile walizonazo, hivyo kuweza kupita ulinzi wa Kubernetes dhidi ya tabia hii.

container.roleBindings.create na/au container.roleBindings.update AU container.clusterRoleBindings.create na/au container.clusterRoleBindings.update kwa mtiririko huo pia ni zaidi zinahitajika ili kutekeleza vitendo hivyo vya kupandisha hadhi.

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

Ruhusa hizi zote zitakuruhusu kuunda au kupdate rasilimali ambapo unaweza kufafanua pod. Kwa kufafanua pod unaweza kueleza SA ambayo itakuwa imeunganishwa na picha ambayo itakuwa inayoendeshwa, hivyo unaweza kuendesha picha ambayo itakuwa inatoa token ya SA kwa seva yako ikikuruhusu kupandisha hadhi kwa akaunti yoyote ya huduma. Kwa maelezo zaidi angalia:

Kwa kuwa tuko katika mazingira ya GCP, pia utaweza kupata nodepool GCP SA kutoka kwa huduma ya metadata na kupandisha hadhi katika GCP (kwa kawaida SA ya kompyuta inatumika).

container.secrets.get | container.secrets.list

Kama ilivyoelezwa katika ukurasa huu, kwa ruhusa hizi unaweza kusoma tokens za SAs zote za kubernetes, hivyo unaweza kupandisha hadhi kwao.

container.pods.exec

Kwa ruhusa hii utaweza exec ndani ya pods, ambayo inakupa ufikiaji wa Kubernetes SAs zote zinazofanya kazi katika pods ili kupandisha hadhi ndani ya K8s, lakini pia utaweza kuiba GCP Service Account ya NodePool, ukipandisha hadhi katika GCP.

container.pods.portForward

Kama ilivyoelezwa katika ukurasa huu, kwa ruhusa hizi unaweza kufikia huduma za ndani zinazofanya kazi katika pods ambazo zinaweza kukuruhusu kupandisha hadhi katika Kubernetes (na katika GCP ikiwa kwa namna fulani utaweza kuzungumza na huduma ya metadata).

container.serviceAccounts.createToken

Kwa sababu ya jina la ruhusa, inaonekana kama itakuruhusu kuunda tokens za K8s Service Accounts, hivyo utaweza kupandisha hadhi kwa SA yoyote ndani ya Kubernetes. Hata hivyo, sikuweza kupata kiunganishi chochote cha API cha kukitumia, hivyo nijulishe ikiwa utakipata.

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

Ruhusa hizi zinaweza kukuruhusu kupandisha hadhi katika Kubernetes, lakini zaidi ya uwezekano, unaweza kuzitumia vibaya ili kuendelea kuwepo katika klasta. Kwa maelezo zaidi fuata kiungo hiki.

Support HackTricks

Last updated