[Перевод] Ломаем кластер Kubernetes через Helm v2 tiller
Helm — пакетный менеджер для Kubernetes, что-то вроде apt-get
для Ubuntu. В этой заметке мы увидим предыдущую версию helm (v2) с сервисом tiller, установленным по умолчанию, через который получим доступ к кластеру.
Подготовим кластер, для этого запустим команду:
kubectl run --rm --restart=Never -it --image=madhuakula/k8s-goat-helm-tiller -- bash
Демонстрация
- Если ничего дополнительно не настраивать, helm v2 запускает сервис tiller, который имеет RBAC c полными правами администратора кластера.
- После установки в namespace
kube-system
появляетсяtiller-deploy
, а также открывается порт 44134, привязанный к 0.0.0.0. Это можно проверить с помощью telnet.
$ telnet tiller-deploy.kube-system 44134
- Теперь можно подключиться к сервису tiller. Будем использовать бинарник helm для проведения операций при общении с сервисом tiller:
$ helm --host tiller-deploy.kube-system:44134 version
- Попробуем получить секреты кластера Kubernetes из namespace
kube-system
:
$ kubectl get secrets -n kube-system
- Теперь мы можем создать свой собственный чарт, в котором создадим роль с правами администратора и назначим эту роль дефолтному сервис аккаунту. Используя токен от этого сервис аккаунта, мы получили полный доступ в наш кластер.
$ helm --host tiller-deploy.kube-system:44134 install /pwnchart
- Сейчас, когда
pwnchart
развернут, сервисная учетная запись по умолчанию имеет полный административный доступ. Проверим еще раз получение секретов изkube-system
kubectl get secrets -n kube-system
Успешное выполнение этого сценария зависит от того, как был развернут tiller, иногда администраторы разворачивают его в отдельном namespace с другими привилегиями. Helm 3 не подвержен таким уязвимостям, т.к. в нем нет tiller.
Примечание переводчика: использование сетевых политик для фильтрации трафика в кластере помогает защитится от уязвимостей подобного типа.