GCP - Containers, GKE & Composer Enum

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

Otras formas de apoyar a HackTricks:

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:

gcloud container images list
gcloud container images list --repository us.gcr.io/<project-name> #Search in other subdomains repositories
gcloud container images describe <name>
gcloud container subnets list-usable
gcloud container clusters list
gcloud container clusters describe <name>
gcloud container clusters get-credentials [NAME]

# Run a container locally
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh

# Login & Download
sudo docker login -u oauth2accesstoken -p $(gcloud auth print-access-token) https://HOSTNAME
## where HOSTNAME is gcr.io, us.gcr.io, eu.gcr.io, or asia.gcr.io.
sudo docker pull HOSTNAME/<project-name>/<image-name>

Privesc

En la siguiente página puedes verificar cómo abusar de los permisos de contenedores para escalar privilegios:

pageGCP - Container Privesc

Node Pools

Estos son el conjunto de máquinas (nodos) que forman los clústeres de kubernetes.

# Pool of machines used by the cluster
gcloud container node-pools list --zone <zone> --cluster <cluster>
gcloud container node-pools describe --cluster <cluster> --zone <zone> <node-pool>

Composer

Esta es la versión gestionada por GCP de Airflow.

gcloud composer environments list --locations <loc>
gcloud composer environments describe --location <loc> <environment>s

Privesc

En la siguiente página puedes verificar cómo abusar de los permisos de composer para escalar privilegios:

pageGCP - Composer Privesc

Kubernetes

Para información sobre qué es Kubernetes, consulta esta página:

pageKubernetes Pentesting

Primero, puedes verificar si existen clústeres de Kubernetes en tu proyecto.

gcloud container clusters list

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.

gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]

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.

kubectl cluster-info

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:

curl -v -k http://10.124.200.1:10255/pods

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.

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

Otras formas de apoyar a HackTricks:

Última actualización