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 за замовчуванням запобігає принципам можливість створювати або оновлювати Roles та ClusterRoles з більшими правами, ніж ті, які має принцип. Однак, GCP принцип з такими правами зможе створювати/оновлювати Roles/ClusterRoles з більшими правами, ніж ті, які він має, ефективно обходячи захист 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 принцип з такими правами зможе створювати/оновлювати RolesBindings/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
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, який буде прикріплений, і образ, який буде запущений, отже, ви можете запустити образ, який буде екстрагувати токен SA на ваш сервер, дозволяючи вам ескалувати до будь-якого облікового запису служби. Для отримання додаткової інформації дивіться:
Оскільки ми знаходимося в середовищі GCP, ви також зможете отримати SA nodepool GCP з метаданих служби та ескалювати привілеї в GCP (за замовчуванням використовується SA обчислень).
container.secrets.get
| container.secrets.list
container.secrets.get
| container.secrets.list
Як пояснено на цій сторінці, з цими правами ви можете читати токени всіх SA Kubernetes, тому ви можете ескалувати до них.
container.pods.exec
container.pods.exec
З цим правом ви зможете виконувати команди в pods, що надає вам доступ до всіх Kubernetes SA, що працюють у pods, для ескалації привілеїв у K8s, але також ви зможете вкрасти GCP Service Account з NodePool, ескалюючи привілеї в GCP.
container.pods.portForward
container.pods.portForward
Як пояснено на цій сторінці, з цими правами ви можете доступатися до локальних служб, що працюють у pods, які можуть дозволити вам ескалювати привілеї в Kubernetes (і в GCP, якщо якимось чином вам вдасться зв'язатися з метаданими служби).
container.serviceAccounts.createToken
container.serviceAccounts.createToken
Через назву права, здається, що воно дозволить вам генерувати токени K8s Service Accounts, тому ви зможете ескалювати до будь-якого SA всередині Kubernetes. Однак я не зміг знайти жодну точку API для його використання, тому дайте знати, якщо ви її знайдете.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Ці права можуть дозволити вам ескалувати привілеї в Kubernetes, але, швидше за все, ви могли б зловживати ними, щоб зберігатися в кластері. Для отримання додаткової інформації перейдіть за цим посиланням.
Last updated