GCP - Containers, GKE & Composer Enum

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Conteneurs

Dans les conteneurs GCP, vous pouvez trouver la plupart des services basés sur des conteneurs que GCP offre, ici vous pouvez voir comment énumérer les plus courants :

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>

Élévation de privilèges

Dans la page suivante, vous pouvez vérifier comment abuser des permissions des conteneurs pour élever les privilèges :

pageGCP - Container Privesc

Groupes de nœuds

Ce sont les groupes de machines (nœuds) qui forment les clusters 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

C'est la version gérée par GCP de Airflow.

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

Élévation de privilèges

Dans la page suivante, vous pouvez vérifier comment abuser des permissions de Composer pour élever les privilèges :

pageGCP - Composer Privesc

Kubernetes

Pour des informations sur ce qu'est Kubernetes, consultez cette page :

pageKubernetes Pentesting

Tout d'abord, vous pouvez vérifier si des clusters Kubernetes existent dans votre projet.

gcloud container clusters list

Si vous avez un cluster, vous pouvez configurer automatiquement votre fichier ~/.kube/config avec gcloud. Ce fichier est utilisé pour vous authentifier lorsque vous utilisez kubectl, le CLI natif pour interagir avec les clusters K8s. Essayez cette commande.

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

Ensuite, examinez le fichier ~/.kube/config pour voir les identifiants générés. Ce fichier sera utilisé pour actualiser automatiquement les jetons d'accès en fonction de la même identité que votre session gcloud active utilise. Cela nécessite bien sûr les permissions correctes en place.

Une fois cela configuré, vous pouvez essayer la commande suivante pour obtenir la configuration du cluster.

kubectl cluster-info

Vous pouvez en savoir plus sur gcloud pour les conteneurs ici.

Voici un script simple pour énumérer Kubernetes dans GCP : https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

Escalade de Privilèges TLS Bootstrap

Initialement, cette technique d'escalade de privilèges permettait de privesc à l'intérieur du cluster GKE, permettant ainsi à un attaquant de le compromettre entièrement.

Cela est dû au fait que GKE fournit des identifiants TLS Bootstrap dans les métadonnées, qui sont accessibles à quiconque en compromettant simplement un pod.

La technique utilisée est expliquée dans les articles suivants :

Et cet outil a été créé pour automatiser le processus : https://github.com/4ARMED/kubeletmein

Cependant, la technique abusait du fait qu'avec les identifiants des métadonnées, il était possible de générer une CSR (Demande de Signature de Certificat) pour un nouveau nœud, qui était approuvé automatiquement. Dans mon test, j'ai vérifié que ces demandes ne sont plus approuvées automatiquement, donc je ne suis pas sûr que cette technique soit encore valide.

Secrets dans l'API Kubelet

Dans cet article, il a été découvert une adresse de l'API Kubelet accessible depuis l'intérieur d'un pod dans GKE donnant les détails des pods en cours d'exécution :

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

Même si l'API ne permet pas de modifier les ressources, il pourrait être possible de trouver des informations sensibles dans la réponse. Le point de terminaison /pods a été trouvé en utilisant Kiterunner.

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Dernière mise à jour