GCP - Container Privesc
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
container
container.clusters.get
Cette permission permet de récupérer les identifiants du cluster Kubernetes en utilisant quelque chose comme :
Obtenir les identifiants du cluster Kubernetes
```bash gcloud container clusters get-credentialsSans permissions supplĂ©mentaires, les identifiants sont assez basiques car vous pouvez simplement lister certaines ressources, mais ils sont utiles pour trouver des mauvaises configurations dans lâenvironnement.
Note
Notez que kubernetes clusters peuvent ĂȘtre configurĂ©s en privĂ©, ce qui empĂȘchera lâaccĂšs au serveur Kube-API depuis Internet.
Si vous nâavez pas cette autorisation, vous pouvez quand mĂȘme accĂ©der au cluster, mais vous devez crĂ©er votre propre fichier de configuration kubectl avec les informations du cluster. Un nouveau fichier gĂ©nĂ©rĂ© ressemble Ă ceci :
Exemple de fichier de configuration kubectl pour un cluster GKE
```yaml apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMRENDQXBTZ0F3SUJBZ0lRRzNaQmJTSVlzeVRPR1FYODRyNDF3REFOQmdrcWhraUc5dzBCQVFzRkFEQXYKTVMwd0t3WURWUVFERXlRMk9UQXhZVEZoWlMweE56ZGxMVFF5TkdZdE9HVmhOaTAzWVdFM01qVmhNR05tTkdFdwpJQmNOTWpJeE1qQTBNakl4T1RJMFdoZ1BNakExTWpFeE1qWXlNekU1TWpSYU1DOHhMVEFyQmdOVkJBTVRKRFk1Ck1ERmhNV0ZsTFRFM04yVXROREkwWmkwNFpXRTJMVGRoWVRjeU5XRXdZMlkwWVRDQ0FhSXdEUVlKS29aSWh2Y04KQVFFQkJRQURnZ0dQQURDQ0FZb0NnZ0dCQU00TWhGemJ3Y3VEQXhiNGt5WndrNEdGNXRHaTZmb0pydExUWkI4Rgo5TDM4a2V2SUVWTHpqVmtoSklpNllnSHg4SytBUHl4RHJQaEhXMk5PczFNMmpyUXJLSHV6M0dXUEtRUmtUWElRClBoMy9MMDVtbURwRGxQK3hKdzI2SFFqdkE2Zy84MFNLakZjRXdKRVhZbkNMMy8yaFBFMzdxN3hZbktwTWdKVWYKVnoxOVhwNEhvbURvOEhUN2JXUTJKWTVESVZPTWNpbDhkdDZQd3FUYmlLNjJoQzNRTHozNzNIbFZxaiszNy90RgpmMmVwUUdFOG90a0VVOFlHQ3FsRTdzaVllWEFqbUQ4bFZENVc5dk1RNXJ0TW8vRHBTVGNxRVZUSzJQWk1rc0hyCmMwbGVPTS9LeXhnaS93TlBRdW5oQ2hnRUJIZTVzRmNxdmRLQ1pmUFovZVI1Qk0vc0w1WFNmTE9sWWJLa2xFL1YKNFBLNHRMVmpiYVg1VU9zMUZIVXMrL3IyL1BKQ2hJTkRaVTV2VjU0L1c5NWk4RnJZaUpEYUVGN0pveXJvUGNuMwpmTmNjQ2x1eGpOY1NsZ01ISGZKRzZqb0FXLzB0b2U3ek05RHlQOFh3NW44Zm5lQm5aVTFnYXNKREZIYVlZbXpGCitoQzFETmVaWXNibWNxOGVPVG9LOFBKRjZ3SURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQWdRd0R3WUQKVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVU5UkhvQXlxY3RWSDVIcmhQZ1BjYzF6Sm9kWFV3RFFZSgpLb1pJaHZjTkFRRUxCUUFEZ2dHQkFLbnp3VEx0QlJBVE1KRVB4TlBNbmU2UUNqZDJZTDgxcC9oeVc1eWpYb2w5CllkMTRRNFVlVUJJVXI0QmJadzl0LzRBQ3ZlYUttVENaRCswZ2wyNXVzNzB3VlFvZCtleVhEK2I1RFBwUUR3Z1gKbkJLcFFCY1NEMkpvZ29tT3M3U1lPdWVQUHNrODVvdWEwREpXLytQRkY1WU5ublc3Z1VLT2hNZEtKcnhuYUVGZAprVVl1TVdPT0d4U29qVndmNUsyOVNCbGJ5YXhDNS9tOWkxSUtXV2piWnZPN0s4TTlYLytkcDVSMVJobDZOSVNqCi91SmQ3TDF2R0crSjNlSjZneGs4U2g2L28yRnhxZWFNdDladWw4MFk4STBZaGxXVmlnSFMwZmVBUU1NSzUrNzkKNmozOWtTZHFBYlhPaUVOMzduOWp2dVlNN1ZvQzlNUk1oYUNyQVNhR2ZqWEhtQThCdlIyQW5iQThTVGpQKzlSMQp6VWRpK3dsZ0V4bnFvVFpBcUVHRktuUTlQcjZDaDYvR0xWWStqYXhuR3lyUHFPYlpNZTVXUDFOUGs4NkxHSlhCCjc1elFvanEyRUpxanBNSjgxT0gzSkxOeXRTdmt4UDFwYklxTzV4QUV0OWxRMjh4N28vbnRuaWh1WmR6M0lCRU8KODdjMDdPRGxYNUJQd0hIdzZtKzZjUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K server: https://34.123.141.28 name: gke_security-devbox_us-central1_autopilot-cluster-1 contexts: - context: cluster: gke_security-devbox_us-central1_autopilot-cluster-1 user: gke_security-devbox_us-central1_autopilot-cluster-1 name: gke_security-devbox_us-central1_autopilot-cluster-1 current-context: gke_security-devbox_us-central1_autopilot-cluster-1 kind: Config preferences: {} users: - name: gke_security-devbox_us-central1_autopilot-cluster-1 user: auth-provider: config: access-token:container.roles.escalate | container.clusterRoles.escalate
Kubernetes empĂȘche par dĂ©faut les principals dâĂȘtre capables de crĂ©er ou de mettre Ă jour des Roles et ClusterRoles avec plus de permissions que celles que le principal possĂšde. Cependant, un principal GCP disposant de ces permissions pourra crĂ©er/mettre Ă jour des Roles/ClusterRoles avec plus de permissions que celles quâil dĂ©tenait, contournant ainsi la protection de Kubernetes contre ce comportement.
container.roles.create et/ou container.roles.update OU container.clusterRoles.create et/ou container.clusterRoles.update sont Ă©galement nĂ©cessaires pour effectuer ces actions dâescalade de privilĂšges.
container.roles.bind | container.clusterRoles.bind
Kubernetes empĂȘche par dĂ©faut les principals dâĂȘtre capables de crĂ©er ou de mettre Ă jour des RoleBindings et ClusterRoleBindings pour accorder plus de permissions que celles que le principal possĂšde. Cependant, un principal GCP disposant de ces permissions pourra crĂ©er/mettre Ă jour des RolesBindings/ClusterRolesBindings avec plus de permissions que celles quâil possĂšde, contournant ainsi la protection de Kubernetes contre ce comportement.
container.roleBindings.create et/ou container.roleBindings.update OU container.clusterRoleBindings.create et/ou container.clusterRoleBindings.update sont Ă©galement nĂ©cessaires pour effectuer ces actions dâescalade de privilĂšges.
container.cronJobs.create | container.cronJobs.update | container.daemonSets.create | container.daemonSets.update | container.deployments.create | container.deployments.update | container.jobs.create | container.jobs.update | container.pods.create | container.pods.update | container.replicaSets.create | container.replicaSets.update | container.replicationControllers.create | container.replicationControllers.update | container.scheduledJobs.create | container.scheduledJobs.update | container.statefulSets.create | container.statefulSets.update
Toutes ces permissions vont vous permettre de crĂ©er ou de mettre Ă jour une ressource oĂč vous pouvez dĂ©finir un pod. En dĂ©finissant un pod vous pouvez spĂ©cifier le SA qui sera attachĂ© et lâimage qui sera exĂ©cutĂ©e ; vous pouvez donc lancer une image qui exfiltrera le token du SA vers votre serveur, vous permettant dâescalader vers nâimporte quel service account.
Pour plus dâinformations check:
Puisque nous sommes dans un environnement GCP, vous pourrez également récupérer le nodepool GCP SA depuis le metadata service et escalader les privilÚges dans GCP (par défaut le compute SA est utilisé).
container.secrets.get | container.secrets.list
As explained in this page, with these permissions you can read the tokens of all the SAs of kubernetes, so you can escalate to them.
container.pods.exec
Avec cette permission vous pourrez exec dans des pods, ce qui vous donne accĂšs Ă tous les SAs Kubernetes sâexĂ©cutant dans des pods pour escalader les privilĂšges dans K8s ; vous pourrez aussi voler le Service Account GCP du NodePool, escaladant ainsi les privilĂšges dans GCP.
container.pods.portForward
Comme explained in this page, avec ces permissions vous pouvez accĂ©der Ă des services locaux sâexĂ©cutant dans des pods qui pourraient vous permettre dâescalader des privilĂšges dans Kubernetes (et dans GCP si dâune maniĂšre ou dâune autre vous parvenez Ă communiquer avec le metadata service).
container.serviceAccounts.createToken
Ă cause du nom de la permission, on pourrait penser quâelle permettra de gĂ©nĂ©rer des tokens des Service Accounts K8s, vous permettant donc dâescalader vers nâimporte quel SA Ă lâintĂ©rieur de Kubernetes. Cependant, je nâai trouvĂ© aucun endpoint API pour lâutiliser â faites-moi savoir si vous en trouvez un.
container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update
Ces permissions pourraient vous permettre dâescalader des privilĂšges dans Kubernetes, mais plus probablement, vous pourriez les abuser pour persister dans le cluster.
For more information follow this link.
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

