Helm é um gerenciador de pacotes para Kubernetes, algo como apt-get
para Ubuntu. Nesta nota veremos a versão anterior do helm (v2) com o serviço de leme instalado por padrão, através do qual acessaremos o cluster.
Vamos preparar o cluster; para isso, execute o comando:
kubectl run --rm --restart=Never -it --image=madhuakula/k8s-goat-helm-tiller -- bash
Demonstração
- Se você não configurar nada adicional, o helm v2 iniciará o serviço de leme, que possui RBAC com direitos totais de administrador de cluster.
- Após a instalação no namespace
kube-system
aparecetiller-deploy
e também abre a porta 44134, vinculada a 0.0.0.0. Isso pode ser verificado usando telnet.
$ telnet tiller-deploy.kube-system 44134
- Agora você pode se conectar ao serviço de leme. Usaremos o binário helm para realizar operações ao nos comunicarmos com o serviço do leme:
$ helm --host tiller-deploy.kube-system:44134 version
- Vamos tentar obter os segredos do cluster Kubernetes do namespace
kube-system
:
$ kubectl get secrets -n kube-system
- Agora podemos criar nosso próprio gráfico, no qual criaremos uma função com direitos de administrador e atribuiremos essa função à conta de serviço padrão. Usando o token desta conta de serviço, recebemos acesso total ao nosso cluster.
$ helm --host tiller-deploy.kube-system:44134 install /pwnchart
- Agora quando
pwnchart
implantada, a conta de serviço padrão terá acesso administrativo total. Vamos verificar novamente como obter segredos dekube-system
kubectl get secrets -n kube-system
A execução bem-sucedida desse script depende de como o Tiller foi implantado; às vezes, os administradores o implantam em um namespace separado com privilégios diferentes. Helm 3 não é suscetível a tais vulnerabilidades porque... não há leme nele.
Nota do tradutor: O uso de políticas de rede para filtrar o tráfego em um cluster ajuda a proteger contra vulnerabilidades desse tipo.
Fonte: habr.com