GCP - Container Privesc

Вивчайте та практикуйте хакінг AWS: Школа хакінгу HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: Школа хакінгу HackTricks GCP Red Team Expert (GRTE)

Підтримайте HackTricks

контейнер

container.clusters.get

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

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

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

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

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

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

container.roles.create та/або container.roles.update АБО container.clusterRoles.create та/або container.clusterRoles.update відповідно також необхідні для виконання цих дій щодо підвищення привілеїв.

container.roles.bind | container.clusterRoles.bind

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

container.roleBindings.create та/або container.roleBindings.update АБО container.clusterRoleBindings.create та/або 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

Усі ці дозволи дозволять вам створювати або оновлювати ресурс, де ви можете визначити под. Визначаючи под, ви можете вказати SA, який буде прикріплений та зображення, яке буде запущено, тому ви можете запустити зображення, яке буде ексфільтрувати токен SA на ваш сервер, дозволяючи вам підвищити привілеї до будь-якого облікового запису служби. Для отримання додаткової інформації перевірте:

Оскільки ми знаходимося в середовищі GCP, ви також зможете отримати GCP SA вузлового пулу з сервісу метаданих та підвищити привілеї в GCP (за замовчуванням використовується обліковий запис обчислення SA).

container.secrets.get | container.secrets.list

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

container.pods.exec

З цим дозволом ви зможете виконувати команди в подах, що дає вам доступ до всіх SA Kubernetes, які працюють в подах, для підвищення привілеїв в K8s, а також ви зможете вкрасти обліковий запис служби GCP вузлового пулу, підвищуючи привілеї в GCP.

container.pods.portForward

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

container.serviceAccounts.createToken

Через назву дозволу, здається, що він дозволить вам генерувати токени облікових записів служби K8s**, тому ви зможете підвищити привілеї до будь-якого SA всередині Kubernetes. Однак я не зміг знайти жодного кінцевого API для його використання, тому дайте мені знати, якщо ви знайдете його.

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

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

Last updated