GCP - Containers & GKE Enum

Apoie o HackTricks

Containers

Nos contêineres da GCP, você pode encontrar a maioria dos serviços baseados em contêineres que a GCP oferece, aqui você pode ver como enumerar os mais comuns:

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>

Elevação de Privilégios

Na página a seguir, você pode verificar como abusar das permissões do contêiner para elevar privilégios:

GCP - Container Privesc

Pools de Nós

Estes são os conjuntos de máquinas (nós) que formam os clusters do 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>

Kubernetes

Para obter informações sobre o que é o Kubernetes, consulte esta página:

Kubernetes Pentesting

Primeiro, você pode verificar se existem clusters do Kubernetes em seu projeto.

gcloud container clusters list

Se você já tem um cluster, você pode ter o gcloud configurar automaticamente o seu arquivo ~/.kube/config. Esse arquivo é usado para autenticar você ao usar kubectl, a CLI nativa para interagir com clusters K8s. Experimente este comando.

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

Em seguida, dê uma olhada no arquivo ~/.kube/config para ver as credenciais geradas. Este arquivo será usado para atualizar automaticamente os tokens de acesso com base na mesma identidade que sua sessão ativa do gcloud está usando. Isso, é claro, requer as permissões corretas em vigor.

Depois que isso estiver configurado, você pode tentar o seguinte comando para obter a configuração do cluster.

kubectl cluster-info

Pode ler mais sobre gcloud para containers aqui.

Este é um script simples para enumerar kubernetes no GCP: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

Escalação de Privilégios do Bootstrap TLS

Inicialmente, esta técnica de escalonamento de privilégios permitia escalar privilégios dentro do cluster GKE permitindo efetivamente a um atacante comprometê-lo completamente.

Isso ocorre porque o GKE fornece credenciais de inicialização do TLS Bootstrap nos metadados, que são acessíveis por qualquer pessoa apenas comprometendo um pod.

A técnica utilizada é explicada nos seguintes posts:

E esta ferramenta foi criada para automatizar o processo: https://github.com/4ARMED/kubeletmein

No entanto, a técnica abusava do fato de que com as credenciais dos metadados era possível gerar uma CSR (Solicitação de Assinatura de Certificado) para um novo nó, que era aprovado automaticamente. No meu teste, verifiquei que essas solicitações não são mais aprovadas automaticamente, então não tenho certeza se essa técnica ainda é válida.

Segredos na API do Kubelet

Neste post foi descoberto um endereço da API do Kubelet acessível de dentro de um pod no GKE que fornece detalhes dos pods em execução:

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

Mesmo que a API não permita modificar recursos, pode ser possível encontrar informações sensíveis na resposta. O endpoint /pods foi encontrado usando Kiterunner.

Apoie o HackTricks

Last updated