GCP - Container Privesc
Вивчайте та практикуйте хакінг AWS: Школа хакінгу HackTricks AWS Red Team Expert (ARTE)
Вивчайте та практикуйте хакінг GCP:
Школа хакінгу HackTricks GCP Red Team Expert (GRTE)
контейнер
container.clusters.get
container.clusters.get
Ця дозвіл дозволяє збирати облікові дані для кластера Kubernetes, використовуючи щось на зразок:
Без додаткових дозволів, облікові дані досить базові, оскільки ви можете лише перелічити деякі ресурси, але вони корисні для виявлення неправильностей в середовищі.
Зверніть увагу, що кластери Kubernetes можуть бути налаштовані як приватні, що заборонить доступ до сервера Kube-API з Інтернету.
Якщо у вас немає цих дозволів, ви все ще можете отримати доступ до кластера, але вам потрібно створити свій власний файл конфігурації kubectl з інформацією про кластер. Новий згенерований файл виглядає наступним чином:
container.roles.escalate
| container.clusterRoles.escalate
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
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
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
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