Имитация пользователя Kubernetes для получения привилегий exec

Вопрос или проблема

Я изучаю уязвимость CVE 2018-1002105, связанную с повышением привилегий в Kubernetes. Как удаленный неаутентифицированный пользователь, я хотел бы использовать сервер метрик, развернутый в моем кластере, для выполнения произвольных команд на любых подах.

Я довольно запутался, как это сделать. В настоящее время я отправил GET-запрос на kube api сервер, чтобы запросить обновление соединения до веб-сокета (CVE), а затем я использовал заголовок x-remote-header для выдачи себя за пользователя в кластере, который имеет доступ к серверу метрик (в данном случае я использовал X-Remote-User: system:serviceaccount:kube-system:horizontal-pod-autoscaler).

Тем не менее, я не могу выполнить команду exec, и я думаю, что причина в том, что у этого пользователя нет привилегий на выполнение команд. Как мне это проверить?

Я также подумываю о создании своего собственного пользователя с правами root, который сможет делать все, что он хочет в кластере, и выдать себя за него. Как мне это сделать и гарантировать, что у этого пользователя есть доступ к серверу метрик?

Итак, в первую очередь, вы не сможете использовать эту уязвимость без очень старой версии Kubernetes, так как она была исправлена в 2018 году. Из официального уведомления мы говорим о Kubernetes 1.12 на последней версии.

Способ, которым эта проблема эксплуатируется, описан довольно хорошо в этом блоге Unit42, и если вы ищете шаги и доказательство концепции, я сначала бы обратился к этому посту.

Путь атаки, который вы описываете, связан с агрегированными API-серверами, поэтому он применим только в том случае, если вы используете внешний агрегированный API сервер, такой как сервер метрик, и это было возможно, так как в те дни неаутентифицированные пользователи имели право делать запросы на открытие к агрегированным API серверам. Этот путь атаки был затвердын в 1.14, когда права неаутентифицированных пользователей к API-серверу были ограничены.

Чтобы ответить на некоторые другие касательные вопросы из вашего запроса. Лучший способ проверить свои права на кластер Kubernetes – это kubectl auth can-i --list, который вернет ваши права, определенные системой RBAC.

Если вы используете сервер метрик, развернутый в кластере Kubernetes, и у вас есть пользователь с правами cluster-admin (по сути, root), у него будут права изменять этот сервис, так как у него будут все права на рабочие нагрузки, развернутые в кластере.

Ответ или решение

Использование уязвимости CVE-2018-1002105 для повышения привилегий в Kubernetes

Ваша задача — изучить использование уязвимости CVE-2018-1002105 в Kubernetes для получения привилегий exec в кластере, на который у вас нет аутентифицированного доступа. Давайте детально рассмотрим описанные шаги и возможные подходы.

Понимание уязвимости

Важно отметить, что уязвимость CVE-2018-1002105 затрагивает проблемы с авторизацией для агрегации API-серверов. Эта уязвимость позволяет неаутентифицированным пользователям делать запросы к агрегированным API-серверам, что в основном применимо к старым версиям Kubernetes, выпущенным до версии 1.14. При использовании более новых версий Kubernetes эта уязвимость была устранена, и права неаутентифицированных пользователей были значительно ограничены.

Проверка текущих прав доступа

Чтобы проверить, какие права имеет ваш текущий пользователь, вам необходимо использовать команду:

kubectl auth can-i --list

Эта команда покажет все разрешения, принадлежащие вашему пользователю, позволяя вам определить, есть ли у него доступ к запуску команд exec на подах.

Имитация пользователя с правами exec

Если текущий сервисный аккаунт (system:serviceaccount:kube-system:horizontal-pod-autoscaler) не обладает необходимыми правами exec, вы можете создать собственного пользователя с необходимыми привилегиями.

Создание пользователя с правами root

  1. Обращение к системе RBAC: Вам необходимо будет создать пользователя или сервисный аккаунт с ролью, которая включает права exec на подах. Это может быть сделано через манифесты YAML.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: <ваш-неймспейс>
  name: exec-role
rules:
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create"]
  1. Создание сервисного аккаунта:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: exec-sa
  namespace: <ваш-неймспейс>
  1. Связывание роли с сервисным аккаунтом:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: exec-role-binding
  namespace: <ваш-неймспейс>
subjects:
- kind: ServiceAccount
  name: exec-sa
  namespace: <ваш-неймспейс>
roleRef:
  kind: Role
  name: exec-role
  apiGroup: rbac.authorization.k8s.io

После выполнения этих шагов, ваш сервисный аккаунт exec-sa будет иметь необходимые права exec, что позволит вам использовать его для выполнения команд в подах.

  1. Имитация нового пользователя: Теперь, используя ваш созданный сервисный аккаунт, вы сможете выполнять команды через API, имитируя его в заголовках запросов.
curl -X GET <API_SERVER_URL>/api/v1/namespaces/<ваш-неймспейс>/pods/<ваш-под>/exec?command=<ваша-команда>&container=<ваш-контейнер>&stdin=true&stdout=true&tty=true -H "Authorization: Bearer <TOKEN>"

Заключение

Подводя итог, для успешного экрана и использования уязвимости CVE-2018-1002105, в первую очередь, убедитесь, что ваш кластер работает на старой версии Kubernetes, поскольку в новых версиях эта уязвимость была устранена. Следующее — проверьте свои права с помощью инструмента kubectl и создайте сервисный аккаунт, используя систему RBAC, с правами, необходимыми для выполнения команд exec. Этот процесс позволит вам преодолеть ограничения текущего пользователя и даст возможность управлять вашим кластером более эффективно.

Оцените материал
Добавить комментарий

Капча загружается...