GCP - Container Privesc

Reading time: 5 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

container

container.clusters.get

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

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

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

note

Kumbuka kwamba vikundi vya kubernetes vinaweza kuandaliwa kuwa binafsi, ambavyo vitakataa ufikiaji wa seva ya Kube-API 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:

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: <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 wakala kuwa na uwezo wa kuunda au k updating Roles na ClusterRoles zenye idhini zaidi kuliko zile ambazo wakala ana. Hata hivyo, wakala wa GCP mwenye ruhusa hizo atakuwa na uwezo wa kuunda/update Roles/ClusterRoles zenye idhini zaidi kuliko zile alizo nazo, kwa hivyo akiepuka 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 wakala kuwa na uwezo wa kuunda au k updating RoleBindings na ClusterRoleBindings ili kutoa idhini zaidi kuliko zile ambazo wakala ana. Hata hivyo, wakala wa GCP mwenye ruhusa hizo atakuwa na uwezo wa kuunda/update RolesBindings/ClusterRolesBindings zenye idhini zaidi kuliko zile alizo nazo, kwa hivyo akiepuka 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 kuboresha rasilimali ambapo unaweza kufafanua pod. Kwa kufafanua pod unaweza kueleza SA ambayo itakuwa imeunganishwa na picha ambayo itakuwa inayoendeshwa, kwa 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 kuingia kwenye pods, ambayo inakupa ufikiaji wa Kubernetes SAs zinazokimbia 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 zinazokimbia katika pods ambazo zinaweza kukuruhusu kupandisha hadhi katika Kubernetes (na katika GCP ikiwa kwa namna fulani unafanikiwa 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.

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks