GCP - Container Privesc
Impara e pratica l'hacking su AWS: HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'hacking su GCP:
HackTricks Training GCP Red Team Expert (GRTE)
container
container.clusters.get
container.clusters.get
Questa autorizzazione consente di raccogliere le credenziali per il cluster Kubernetes utilizzando qualcosa del genere:
Senza permessi aggiuntivi, le credenziali sono piuttosto di base in quanto è possibile solo elencare alcune risorse, ma sono utili per individuare errori di configurazione nell'ambiente.
Nota che i cluster Kubernetes potrebbero essere configurati come privati, il che impedisce l'accesso al server Kube-API da Internet.
Se non si dispone di questo permesso, è comunque possibile accedere al cluster, ma è necessario creare il proprio file di configurazione kubectl con le informazioni del cluster. Un file appena generato appare così:
container.roles.escalate
| container.clusterRoles.escalate
container.roles.escalate
| container.clusterRoles.escalate
Kubernetes di default impedisce ai principali di poter creare o aggiornare Ruoli e ClusterRoles con più permessi di quelli che il principale possiede. Tuttavia, un principale di GCP con quei permessi sarà in grado di creare/aggiornare Ruoli/ClusterRoles con più permessi di quelli che possiede, eludendo efficacemente 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 tali azioni di escalation dei privilegi.
container.roles.bind
| container.clusterRoles.bind
container.roles.bind
| container.clusterRoles.bind
Kubernetes di default impedisce ai principali di poter creare o aggiornare RoleBindings e ClusterRoleBindings per concedere più permessi di quelli che il principale possiede. Tuttavia, un principale di GCP con quei permessi sarà in grado di creare/aggiornare RoleBindings/ClusterRolesBindings con più permessi di quelli che possiede, eludendo efficacemente 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 tali 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
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 in cui puoi definire un pod. Definendo un pod puoi specificare l'account di servizio che verrà associato e l'immagine che verrà eseguita, quindi puoi eseguire un'immagine che esfiltrerà il token dell'account di servizio al tuo server consentendoti di scalare a qualsiasi account di servizio. Per ulteriori informazioni controlla:
Poiché ci troviamo in un ambiente GCP, sarai anche in grado di ottenere l'account di servizio GCP del nodepool dal servizio di metadati e escalare i privilegi in GCP (per impostazione predefinita viene utilizzato l'account di servizio di calcolo).
container.secrets.get
| container.secrets.list
container.secrets.get
| container.secrets.list
Come spiegato in questa pagina, con questi permessi puoi leggere i token di tutti gli account di servizio di Kubernetes, quindi puoi scalare a essi.
container.pods.exec
container.pods.exec
Con questo permesso sarai in grado di eseguire comandi nei pod, il che ti dà accesso a tutti gli account di servizio di Kubernetes in esecuzione nei pod per scalare i privilegi all'interno di K8s, ma sarai anche in grado di rubare l'Account di servizio GCP del NodePool, escalando i privilegi in GCP.
container.pods.portForward
container.pods.portForward
Come spiegato in questa pagina, con questi permessi puoi accedere ai servizi locali in esecuzione nei pod che potrebbero consentirti di scalare i privilegi in Kubernetes (e in GCP se in qualche modo riesci a comunicare con il servizio di metadati).
container.serviceAccounts.createToken
container.serviceAccounts.createToken
A causa del nome del permesso, sembra che ti permetterà di generare token degli Account di servizio di K8s, quindi sarai in grado di escalare a qualsiasi SA all'interno di Kubernetes. Tuttavia, non ho trovato nessun endpoint API da utilizzare, quindi fammi sapere se lo trovi.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Questi permessi potrebbero consentirti di scalare i privilegi in Kubernetes, ma più probabilmente potresti abusarne per persistere nel cluster. Per ulteriori informazioni seguire questo link.
Impara e pratica l'hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'hacking su GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated