GCP - Containers & GKE Enum

Support HackTricks

Containers

Nos containers do GCP, você pode encontrar a maioria dos serviços baseados em containers que o 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>

Privesc

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

GCP - Container Privesc

Node Pools

Esses são os pools 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 informações sobre o que é Kubernetes, consulte esta página:

Kubernetes Pentesting

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

gcloud container clusters list

Se você tiver um cluster, pode fazer com que o gcloud configure automaticamente seu arquivo ~/.kube/config. Este arquivo é usado para autenticar você quando utiliza kubectl, a CLI nativa para interagir com clusters K8s. Tente este comando.

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

Então, 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.

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

kubectl cluster-info

Você 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 TLS Bootstrap

Inicialmente, essa técnica de escalonamento de privilégios permitia privesc dentro do cluster GKE, permitindo efetivamente que um atacante comprometesse totalmente.

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

A técnica utilizada é explicada nas seguintes postagens:

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

No entanto, a técnica abusou do fato de que com as credenciais de metadados era possível gerar um CSR (Certificate Signing Request) para um novo nó, que foi automaticamente aprovado. Nos meus testes, verifiquei que esses pedidos não são mais aprovados automaticamente, então não tenho certeza se essa técnica ainda é válida.

Segredos na API Kubelet

Em esta postagem foi descoberto um endereço da API Kubelet acessível de dentro de um pod no GKE, fornecendo os 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.

Support HackTricks

Last updated