GCP - Container Privesc
kontejner
container.clusters.get
container.clusters.get
Ova dozvola omogućava prikupljanje akreditacija za Kubernetes klaster koristeći nešto poput:
Bez dodatnih dozvola, akreditacije su prilično osnovne i možete samo izlistati neke resurse, ali su korisne za pronalaženje grešaka u konfiguraciji okruženja.
Imajte na umu da kubernetes klasteri mogu biti konfigurisani kao privatni, što će onemogućiti pristup Kube-API serveru sa interneta.
Ako nemate ovu dozvolu, i dalje možete pristupiti klasteru, ali morate kreirati svoju vlastitu kubectl konfiguracionu datoteku sa informacijama o klasterima. Novo generisana datoteka izgleda ovako:
container.roles.escalate
| container.clusterRoles.escalate
container.roles.escalate
| container.clusterRoles.escalate
Kubernetes podrazumevano onemogućava principale da mogu kreirati ili ažurirati Role i ClusterRole sa više dozvola od onih koje principali imaju. Međutim, GCP principali sa tim dozvolama će biti u mogućnosti da kreiraju/ažuriraju Role/ClusterRole sa više dozvola od onih koje poseduju, efektivno zaobilazeći Kubernetes zaštitu od ovog ponašanja.
container.roles.create
i/ili container.roles.update
ILI container.clusterRoles.create
i/ili container.clusterRoles.update
su takođe neophodni za izvođenje ovih akcija eskalacije privilegija.
container.roles.bind
| container.clusterRoles.bind
container.roles.bind
| container.clusterRoles.bind
Kubernetes podrazumevano onemogućava principale da mogu kreirati ili ažurirati RoleBindings i ClusterRoleBindings kako bi dali više dozvola od onih koje principali imaju. Međutim, GCP principali sa tim dozvolama će biti u mogućnosti da kreiraju/ažuriraju RoleBindings/ClusterRoleBindings sa više dozvola od onih koje imaju, efektivno zaobilazeći Kubernetes zaštitu od ovog ponašanja.
container.roleBindings.create
i/ili container.roleBindings.update
ILI container.clusterRoleBindings.create
i/ili container.clusterRoleBindings.update
su takođe neophodni za izvođenje ovih akcija eskalacije privilegija.
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
Sve ove dozvole će vam omogućiti da kreirate ili ažurirate resurs gde možete definisati pod. Definisanjem poda možete specificirati SA koji će biti povezan i sliku koja će biti pokrenuta, što vam omogućava da pokrenete sliku koja će izfiltrirati token SA na vaš server, omogućavajući vam da eskalirate do bilo kog servisnog naloga. Za više informacija pogledajte:
Pošto se nalazimo u GCP okruženju, takođe ćete biti u mogućnosti da dobijete GCP SA nodepoola iz metapodataka i eskališete privilegije u GCP (podrazumevano se koristi compute SA).
container.secrets.get
| container.secrets.list
container.secrets.get
| container.secrets.list
Kao što je objašnjeno na ovoj stranici, sa ovim dozvolama možete čitati tokene svih SA kubernetesa, tako da možete eskalirati do njih.
container.pods.exec
container.pods.exec
Sa ovom dozvolom ćete moći da izvršite komandu unutar podova, što vam daje pristup svim Kubernetes SA koji se izvršavaju u podovima kako biste eskalirali privilegije unutar K8s-a, ali takođe ćete moći da ukradete GCP Service Account od NodePoola, eskališući privilegije u GCP-u.
container.pods.portForward
container.pods.portForward
Kao što je objašnjeno na ovoj stranici, sa ovim dozvolama možete pristupiti lokalnim servisima koji se izvršavaju u podovima, što vam može omogućiti da eskališete privilegije u Kubernetesu (i u GCP-u ako nekako uspete da komunicirate sa metapodacima).
container.serviceAccounts.createToken
container.serviceAccounts.createToken
Zbog naziva dozvole, izgleda da će vam omogućiti da generišete tokene K8s servisnih naloga, tako da ćete moći da eskališete privilegije do bilo kog SA unutar Kubernetesa. Međutim, nisam uspeo da pronađem API endpoint za korišćenje ove dozvole, pa me obavestite ako je pronađete.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Ove dozvole mogu vam omogućiti eskalaciju privilegija u Kubernetesu, ali verovatnije je da ih možete zloupotrebiti kako biste uporni u klasteru. Za više informacija pratite ovaj link.
Last updated