GCP - Container Privesc

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

контейнер

container.clusters.get

Ця дозвола дозволяє збирати облікові дані для Kubernetes-кластера, використовуючи, наприклад:

Отримати облікові дані Kubernetes-кластера ```bash gcloud container clusters get-credentials --zone ```

Без додаткових дозволів облікові дані досить базові — ви можете лише перелічувати деякі ресурси, проте вони корисні для виявлення помилок конфігурації в середовищі.

Note

Зауважте, що kubernetes кластери можуть бути налаштовані як приватні, і це заборонить доступ до Kube-API сервера з Інтернету.

Якщо у вас немає цього дозволу, ви все одно можете отримати доступ до кластера, але потрібно створити власний файл конфігурації kubectl з інформацією про кластер. Новостворений файл виглядає так:

Приклад файлу конфігурації kubectl для кластера GKE ```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: 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 за замовчуванням перешкоджає тому, щоб принципали могли створювати або оновлювати Roles і ClusterRoles з більшою кількістю дозволів, ніж ті, що має принципал. Однак GCP принципал з такими правами зможе створювати/оновлювати Roles/ClusterRoles з більшою кількістю дозволів, ніж ті, що він мав, ефективно обходячи захист Kubernetes проти такої поведінки.

container.roles.create and/or container.roles.update OR container.clusterRoles.create and/or container.clusterRoles.update відповідно також є необхідними для виконання цих дій підвищення привілеїв.

container.roles.bind | container.clusterRoles.bind

Kubernetes за замовчуванням перешкоджає тому, щоб принципали могли створювати або оновлювати RoleBindings і ClusterRoleBindings, щоб надати більше дозволів, ніж ті, що має принципал. Проте GCP принципал з такими правами зможе створювати/оновлювати RolesBindings/ClusterRolesBindings з більшими дозволами, ніж ті, що він має, ефективно обходячи захист Kubernetes проти такої поведінки.

container.roleBindings.create and/or container.roleBindings.update OR container.clusterRoleBindings.create and/or container.clusterRoleBindings.update відповідно також є необхідними для виконання цих дій підвищення привілеїв.

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

Усі ці дозволи дозволяють вам створити або оновити ресурс, у якому ви можете визначити pod. Визначивши pod, ви можете вказати SA, який буде приєднаний, та image, який буде запущено, отже ви можете запустити image, який буде exfiltrate the token of the SA to your server, що дозволяє вам підвищити привілеї до будь-якого service account.
Для більш детальної інформації перевірте:

Оскільки ми знаходимося в GCP середовищі, ви також зможете get the nodepool GCP SA з metadata service і escalate privileges in GCP (за замовчуванням використовується compute SA).

container.secrets.get | container.secrets.list

Як пояснено на цій сторінці, з цими дозволами ви можете читати tokens всіх SAs Kubernetes, тож ви можете підвищити привілеї до них.

container.pods.exec

Маючи цей дозвіл, ви зможете exec into pods, що дає вам доступ до всіх Kubernetes SAs, запущених у pods, для підвищення привілеїв всередині K8s; окрім того, ви зможете steal GCP Service Account NodePool-а, escalating privileges in GCP.

container.pods.portForward

Як пояснено на цій сторінці, з цими дозволами ви можете доступатися до локальних сервісів, що працюють у pods, які можуть дозволити вам escalate privileges in Kubernetes (і в GCP, якщо якимось чином ви зможете звертатися до metadata service).

container.serviceAccounts.createToken

Через назву цього дозволу здається, ніби він дозволяє вам генерувати токени K8s Service Accounts, тож ви зможете privesc to any SA всередині Kubernetes. Проте я не зміг знайти жодного API endpoint для його використання — повідомте, якщо знайдете.

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

Ці дозволи можуть дозволити вам підвищити привілеї в Kubernetes, але більш ймовірно, що ви зможете зловживати ними, щоб persist in the cluster.
Для більш детальної інформації перейдіть за цим посиланням.

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks