GCP - Containers, GKE & Composer Enum
Contenedores
En los contenedores de GCP puedes encontrar la mayoría de los servicios basados en contenedores que ofrece GCP, aquí puedes ver cómo enumerar los más comunes:
Privesc
En la siguiente página puedes verificar cómo abusar de los permisos de contenedores para escalar privilegios:
pageGCP - Container PrivescNode Pools
Estos son el conjunto de máquinas (nodos) que forman los clústeres de kubernetes.
Composer
Esta es la versión gestionada por GCP de Airflow.
Privesc
En la siguiente página puedes verificar cómo abusar de los permisos de composer para escalar privilegios:
pageGCP - Composer PrivescKubernetes
Para información sobre qué es Kubernetes, consulta esta página:
pageKubernetes PentestingPrimero, puedes verificar si existen clústeres de Kubernetes en tu proyecto.
Si tienes un clúster, puedes hacer que gcloud
configure automáticamente tu archivo ~/.kube/config
. Este archivo se utiliza para autenticarte cuando usas kubectl, la CLI nativa para interactuar con clústers K8s. Prueba este comando.
Luego, echa un vistazo al archivo ~/.kube/config
para ver las credenciales generadas. Este archivo se utilizará para actualizar automáticamente los tokens de acceso basándose en la misma identidad que tu sesión activa de gcloud
está utilizando. Esto, por supuesto, requiere que los permisos correctos estén establecidos.
Una vez configurado esto, puedes probar el siguiente comando para obtener la configuración del clúster.
Puede leer más sobre gcloud
para contenedores aquí.
Este es un script simple para enumerar kubernetes en GCP: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum
Escalada de Privilegios TLS Bootstrap
Inicialmente, esta técnica de escalada de privilegios permitía privesc dentro del clúster GKE, permitiendo efectivamente a un atacante comprometerlo completamente.
Esto se debe a que GKE proporciona credenciales de TLS Bootstrap en los metadatos, que son accesibles por cualquiera solo comprometiendo un pod.
La técnica utilizada se explica en los siguientes posts:
Y esta herramienta fue creada para automatizar el proceso: https://github.com/4ARMED/kubeletmein
Sin embargo, la técnica abusaba del hecho de que con las credenciales de metadatos era posible generar un CSR (Solicitud de Firma de Certificado) para un nuevo nodo, que era aprobado automáticamente. En mi prueba comprobé que esas solicitudes ya no se aprueban automáticamente, por lo que no estoy seguro de si esta técnica sigue siendo válida.
Secretos en la API de Kubelet
En este post se descubrió una dirección de la API de Kubelet accesible desde dentro de un pod en GKE que daba los detalles de los pods en ejecución:
Aunque la API no permita modificar recursos, podría ser posible encontrar información sensible en la respuesta. El endpoint /pods se encontró utilizando Kiterunner.
Última actualización