GCP - Container Privesc
контейнер
container.clusters.get
container.clusters.get
Ця дозвіл дозволяє збирати облікові дані для кластера Kubernetes, використовуючи щось на зразок:
Без додаткових дозволів, облікові дані досить базові, оскільки ви можете просто перелічити деякі ресурси, але вони корисні для виявлення неправильних конфігурацій в середовищі.
Зверніть увагу, що кластери Kubernetes можуть бути налаштовані як приватні, що заборонить доступ до сервера Kube-API з Інтернету.
Якщо у вас немає цього дозволу, ви все ще можете отримати доступ до кластера, але вам потрібно створити свій власний файл конфігурації kubectl з інформацією про кластер. Новий згенерований виглядає так:
container.roles.escalate
| container.clusterRoles.escalate
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
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
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
container.secrets.get
| container.secrets.list
Як пояснено на цій сторінці, з цими дозволами ви можете читати токени всіх SA Kubernetes, тому ви можете підвищити привілеї до них.
container.pods.exec
container.pods.exec
З цим дозволом ви зможете виконувати команди в подах, що дасть вам доступ до всіх SA Kubernetes, які працюють в подах, для підвищення привілеїв в межах K8s, а також ви зможете вкрасти обліковий запис служби GCP від пулу вузлів, підвищуючи привілеї в GCP.
container.pods.portForward
container.pods.portForward
Як пояснено на цій сторінці, з цими дозволами ви можете отримати доступ до локальних служб, які працюють в подах, що може дозволити вам підвищити привілеї в Kubernetes (і в GCP, якщо ви якимось чином зможете звернутися до служби метаданих).
container.serviceAccounts.createToken
container.serviceAccounts.createToken
Через назву дозволу здається, що він дозволить вам генерувати токени облікових записів служби K8s, тому ви зможете підвищити привілеї до будь-якого SA всередині Kubernetes. Однак я не зміг знайти жодного кінцевого API для його використання, тому дайте мені знати, якщо ви знайдете його.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Ці дозволи можуть дозволити вам підвищити привілеї в Kubernetes, але, ймовірно, ви можете використовувати їх для постійного збереження в кластері. Для отримання додаткової інформації слідкуйте за цим посиланням.
Last updated