GCP - Container Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
container.clusters.get
Questo permesso consente di raccogliere credenziali per il cluster Kubernetes utilizzando qualcosa come:
Senza permessi extra, le credenziali sono piuttosto basilari poiché puoi solo elencare alcune risorse, ma sono utili per trovare configurazioni errate nell'ambiente.
Nota che i cluster kubernetes potrebbero essere configurati per essere privati, il che impedirà l'accesso al server Kube-API da Internet.
Se non hai questo permesso, puoi comunque accedere al cluster, ma devi creare il tuo file di configurazione kubectl con le informazioni sui cluster. Uno generato di recente appare così:
container.roles.escalate
| container.clusterRoles.escalate
Kubernetes per impostazione predefinita previene che i principi possano creare o aggiornare Ruoli e ClusterRuoli con più permessi di quelli che il principio ha. Tuttavia, un principale GCP con quei permessi sarà in grado di creare/aggiornare Ruoli/ClusterRuoli con più permessi di quelli che detiene, bypassando effettivamente la protezione di Kubernetes contro questo comportamento.
container.roles.create
e/o container.roles.update
O container.clusterRoles.create
e/o container.clusterRoles.update
rispettivamente sono anche necessari per eseguire queste azioni di escalation dei privilegi.
container.roles.bind
| container.clusterRoles.bind
Kubernetes per impostazione predefinita previene che i principi possano creare o aggiornare RoleBindings e ClusterRoleBindings per dare più permessi di quelli che il principio ha. Tuttavia, un principale GCP con quei permessi sarà in grado di creare/aggiornare RoleBindings/ClusterRoleBindings con più permessi di quelli che ha, bypassando effettivamente la protezione di Kubernetes contro questo comportamento.
container.roleBindings.create
e/o container.roleBindings.update
O container.clusterRoleBindings.create
e/o container.clusterRoleBindings.update
rispettivamente sono anche necessari per eseguire queste azioni di escalation dei privilegi.
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
Tutti questi permessi ti permetteranno di creare o aggiornare una risorsa dove puoi definire un pod. Definendo un pod puoi specificare il SA che sarà allegato e l'immagine che sarà eseguita, quindi puoi eseguire un'immagine che esfiltra il token del SA al tuo server, permettendoti di escalare a qualsiasi account di servizio. Per ulteriori informazioni controlla:
Poiché siamo in un ambiente GCP, sarai anche in grado di ottenere il SA del nodepool GCP dal servizio metadata e escalare privilegi in GCP (per impostazione predefinita viene utilizzato il SA di calcolo).
container.secrets.get
| container.secrets.list
Come spiegato in questa pagina, con questi permessi puoi leggere i token di tutti i SA di kubernetes, quindi puoi escalare a loro.
container.pods.exec
Con questo permesso sarai in grado di eseguire comandi nei pod, il che ti dà accesso a tutti i SA di Kubernetes in esecuzione nei pod per escalare privilegi all'interno di K8s, ma sarai anche in grado di rubare il GCP Service Account del NodePool, escalando privilegi in GCP.
container.pods.portForward
Come spiegato in questa pagina, con questi permessi puoi accedere ai servizi locali in esecuzione nei pod che potrebbero permetterti di escalare privilegi in Kubernetes (e in GCP se in qualche modo riesci a comunicare con il servizio metadata).
container.serviceAccounts.createToken
A causa del nome del permesso, sembra che ti permetterà di generare token degli K8s Service Accounts, quindi sarai in grado di escalare a qualsiasi SA all'interno di Kubernetes. Tuttavia, non sono riuscito a trovare alcun endpoint API da utilizzare, quindi fammi sapere se lo trovi.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Questi permessi potrebbero permetterti di escalare privilegi in Kubernetes, ma più probabilmente, potresti abusarne per persistere nel cluster. Per ulteriori informazioni segui questo link.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)