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

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-credentials --zone ```

Sans 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: cmd-args: config config-helper --format=json cmd-path: gcloud expiry: "2022-12-06T01:13:11Z" expiry-key: "{.credential.token_expiry}" token-key: "{.credential.access_token}" name: gcp ```

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