GCP - Container Privesc

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS korsanlığını öğrenin!

HackTricks'i desteklemenin diğer yolları:

konteyner

container.clusters.get

Bu izin, bir şeyi kullanarak Kubernetes kümesi için kimlik bilgilerini toplamaya izin verir:

gcloud container clusters get-credentials <cluster_name> --zone <zone>

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:

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: <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, 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

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

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

Bu izinlerle, bu sayfada açıklandığı gibi tüm Kubernetes SA'ların tokenlerini okuyabilirsiniz, bu nedenle bunlara yükseltebilirsiniz.

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

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

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

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