GCP - Container Privesc

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

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

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

container.roles.bind | container.clusterRoles.bind

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

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, але, ймовірно, ви можете використовувати їх для постійного збереження в кластері. Для отримання додаткової інформації слідкуйте за цим посиланням.

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated