GCP - Container Privesc
konteyner
container.clusters.get
container.clusters.get
Bu izin, bir şeyi kullanarak Kubernetes kümesi için kimlik bilgilerini toplamaya izin verir:
Ek izinler olmadan kimlik bilgileri oldukça temel olabilir, sadece bazı kaynakları listeleyebilirsiniz, ancak çevredeki yanlış yapılandırmaları bulmak için yararlıdırlar.
Kubernetes kümeleme, İnternet'ten Kube-API sunucusuna erişimi engelleyecek şekilde yapılandırılmış olabilir.
Bu izne sahip değilseniz, kümelere hala erişebilirsiniz, ancak kendi kubectl yapılandırma dosyanızı oluşturmanız gerekmektedir. Yeni oluşturulan bir dosya aşağıdaki gibi görünür:
container.roles.escalate
| container.clusterRoles.escalate
container.roles.escalate
| container.clusterRoles.escalate
Kubernetes, varsayılan olarak, bir prensibin sahip olduğu izinlerden daha fazla izne sahip Roller ve ClusterRoller oluşturmasını veya güncelleştirmesini engeller. Ancak, bu izinlere sahip bir GCP prensibi, Kubernetes'in bu davranışa karşı korumasını etkili bir şekilde atlayarak daha fazla izne sahip Roller/ClusterRoller oluşturabilir/güncelleştirebilir.
Bu ayrıcalıkları gerçekleştirmek için container.roles.create
ve/veya container.roles.update
VEYA container.clusterRoles.create
ve/veya container.clusterRoles.update
izinlerinin de gereklidir.
container.roles.bind
| container.clusterRoles.bind
container.roles.bind
| container.clusterRoles.bind
Kubernetes, varsayılan olarak, bir prensibin sahip olduğu izinlerden daha fazla izne sahip RoleBinding ve ClusterRoleBinding oluşturmasını veya güncelleştirmesini engeller. Ancak, bu izinlere sahip bir GCP prensibi, Kubernetes'in bu davranışa karşı korumasını etkili bir şekilde atlayarak daha fazla izne sahip RoleBinding/ClusterRoleBinding oluşturabilir/güncelleştirebilir.
Bu ayrıcalıkları gerçekleştirmek için container.roleBindings.create
ve/veya container.roleBindings.update
VEYA container.clusterRoleBindings.create
ve/veya container.clusterRoleBindings.update
izinlerinin de gereklidir.
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
Bu izinlerin hepsi, bir kaynak oluşturmanıza veya güncelleştirmenize izin verecektir, burada bir pod tanımlayabilirsiniz. Bir pod tanımlayarak, bağlanacak SA'yı ve çalıştırılacak görüntüyü belirtebilirsiniz, bu nedenle bir görüntüyü çalıştırarak SA'nın belirli bir sunucuya tokenini sızdırabilir ve herhangi bir hizmet hesabına yükseltebilirsiniz. Daha fazla bilgi için kontrol edin:
Bir GCP ortamında olduğumuz için, metadata hizmetinden nodepool GCP SA'yı alabilir ve GCP'de ayrıcalıkları yükseltebilirsiniz (varsayılan olarak compute SA kullanılır).
container.secrets.get
| container.secrets.list
container.secrets.get
| container.secrets.list
Bu izinlerle, bu sayfada açıklandığı gibi tüm Kubernetes SA'ların tokenlerini okuyabilirsiniz, bu nedenle bunlara yükseltebilirsiniz.
container.pods.exec
container.pods.exec
Bu izinle, podlara exec yapabilirsiniz, bu da K8s içindeki tüm Kubernetes SA'lara ayrıcalıklarını yükseltme yeteneği sağlar, ayrıca NodePool'un GCP Hizmet Hesabını çalabilir ve GCP'de ayrıcalıkları yükseltebilirsiniz.
container.pods.portForward
container.pods.portForward
Bu izinlerle, podlarda çalışan yerel hizmetlere erişebilirsiniz, bu da Kubernetes'te ayrıcalıkları yükseltebileceğiniz (ve GCP'de metadata hizmetiyle iletişim kurmayı başarırsanız) anlamına gelir.
container.serviceAccounts.createToken
container.serviceAccounts.createToken
Bu iznin adı, K8s Hizmet Hesaplarının tokenlerini oluşturmanıza izin vereceğini gösteriyor gibi görünüyor, bu nedenle Kubernetes içindeki herhangi bir SA'ya yükseltebilirsiniz. Ancak, bunu kullanmak için herhangi bir API uç noktası bulamadım, bu yüzden bulursanız bana bildirin.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Bu izinler, Kubernetes'te ayrıcalıkları yükseltebilmenize izin verebilir, ancak daha olası olarak, bunları kümede kalıcı hale getirmek için kötüye kullanabilirsiniz. Daha fazla bilgi için bu bağlantıyı takip edin.
Last updated