GCP - Containers & GKE Enum
Conteneurs
Dans les conteneurs GCP, vous pouvez trouver la plupart des services basés sur des conteneurs que GCP propose, ici vous pouvez voir comment énumérer les plus courants :
Privesc
Dans la page suivante, vous pouvez vérifier comment abuser des permissions des conteneurs pour élever les privilèges :
GCP - Container PrivescNode Pools
Ce sont les pools de machines (nœuds) qui forment les clusters kubernetes.
Kubernetes
Pour des informations sur ce qu'est Kubernetes, consultez cette page :
Kubernetes PentestingTout d'abord, vous pouvez vérifier s'il existe des clusters Kubernetes dans votre projet.
Si vous avez un cluster, vous pouvez faire en sorte que gcloud
configure automatiquement votre fichier ~/.kube/config
. Ce fichier est utilisé pour vous authentifier lorsque vous utilisez kubectl, l'interface en ligne de commande native pour interagir avec les clusters K8s. Essayez cette commande.
Ensuite, jetez un œil au 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 celle utilisée par votre session gcloud
active. Cela nécessite bien sûr les autorisations appropriées.
Une fois cela configuré, vous pouvez essayer la commande suivante pour obtenir la configuration du cluster.
Vous pouvez en savoir plus sur gcloud
pour les conteneurs ici.
Ceci est 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 complètement.
Cela est dû au fait que GKE fournit des informations d'identification TLS Bootstrap dans les métadonnées, qui sont accessibles par quiconque en compromettant simplement un pod.
La technique utilisée est expliquée dans les publications suivantes :
Et cet outil a été créé pour automatiser le processus : https://github.com/4ARMED/kubeletmein
Cependant, la technique abusait du fait que avec les informations d'identification des métadonnées, il était possible de générer une CSR (Certificate Signing Request) pour un nouveau nœud, qui était automatiquement approuvé. Dans mon test, j'ai vérifié que ces demandes ne sont plus automatiquement approuvées, donc je ne suis pas sûr que cette technique soit toujours valide.
Secrets dans l'API Kubelet
Dans cet article, il a été découvert qu'il y avait une adresse API Kubelet accessible depuis l'intérieur d'un pod dans GKE, donnant les détails des pods en cours d'exécution :
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.
Last updated