GCP - Container Privesc

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

container

container.clusters.get

Αυτή η άδεια επιτρέπει να συλλέξετε credentials για το Kubernetes cluster χρησιμοποιώντας κάτι όπως:

Λήψη Kubernetes cluster credentials ```bash gcloud container clusters get-credentials --zone ```

Χωρίς επιπλέον δικαιώματα, τα διαπιστευτήρια είναι αρκετά βασικά καθώς μπορείτε απλώς να απαριθμήσετε κάποιον πόρο, αλλά είναι χρήσιμα για να βρείτε λάθος διαμορφώσεις στο περιβάλλον.

Note

Σημειώστε ότι kubernetes clusters μπορεί να έχουν διαμορφωθεί ως ιδιωτικά, κάτι που θα απαγορεύει την πρόσβαση στον Kube-API server από το Διαδίκτυο.

Αν δεν έχετε αυτή την άδεια μπορείτε ακόμα να αποκτήσετε πρόσβαση στο cluster, αλλά πρέπει να δημιουργήσετε το δικό σας kubectl config file με τις πληροφορίες των clusters. Ένα νεοπαραγόμενο μοιάζει έτσι:

Example kubectl config file for GKE cluster ```yaml 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: 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 από προεπιλογή αποτρέπει τις οντότητες από το να δημιουργούν ή να ενημερώνουν Roles και ClusterRoles με περισσότερα permissions από αυτά που έχει η οντότητα. Ωστόσο, μια GCP οντότητα με αυτά τα permissions θα είναι σε θέση να δημιουργήσει/ενημερώσει Roles/ClusterRoles με περισσότερα permissions από αυτά που κατείχε, παρακάμπτοντας έτσι την προστασία του Kubernetes ενάντια σε αυτή τη συμπεριφορά.

container.roles.create και/ή container.roles.update Ή container.clusterRoles.create και/ή container.clusterRoles.update αντιστοίχως είναι επίσης απαραίτητα για την εκτέλεση αυτών των ενεργειών privilege escalation.

container.roles.bind | container.clusterRoles.bind

Kubernetes από προεπιλογή αποτρέπει τις οντότητες από το να δημιουργούν ή να ενημερώνουν RoleBindings και ClusterRoleBindings για να δώσουν περισσότερα permissions από αυτά που έχει η οντότητα. Ωστόσο, μια GCP οντότητα με αυτά τα permissions θα είναι σε θέση να δημιουργήσει/ενημερώσει RolesBindings/ClusterRolesBindings με περισσότερα permissions από αυτά που έχει, παρακάμπτοντας έτσι την προστασία του Kubernetes ενάντια σε αυτή τη συμπεριφορά.

container.roleBindings.create και/ή container.roleBindings.update Ή container.clusterRoleBindings.create και/ή container.clusterRoleBindings.update αντιστοίχως είναι επίσης αναγκαία για την εκτέλεση αυτών των ενεργειών privilege escalation.

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

Όλα αυτά τα permissions θα σας επιτρέψουν να δημιουργήσετε ή να ενημερώσετε ένα resource όπου μπορείτε να ορίσετε ένα pod. Ορίζοντας ένα pod μπορείτε να καθορίσετε το SA που θα συσχετιστεί και την image που θα τρέξει, οπότε μπορείτε να τρέξετε μια image που θα exfiltrate το token του SA στον server σας επιτρέποντάς σας να escal-άρετε σε οποιοδήποτε service account.
Για περισσότερες πληροφορίες ελέγξτε:

Καθώς βρισκόμαστε σε περιβάλλον GCP, θα μπορείτε επίσης να πάρετε το nodepool GCP SA από την metadata υπηρεσία και να escalate privileges in GCP (από προεπιλογή χρησιμοποιείται το compute SA).

container.secrets.get | container.secrets.list

As explained in this page, με αυτά τα permissions μπορείτε να διαβάσετε τα tokens όλων των SAs του kubernetes, οπότε μπορείτε να escal-άρετε σε αυτά.

container.pods.exec

Με αυτό το permission θα μπορείτε να exec into pods, το οποίο σας δίνει πρόσβαση σε όλα τα Kubernetes SAs που τρέχουν σε pods για να escal-άρετε προνόμια μέσα στο K8s, αλλά επίσης θα μπορείτε να κλέψετε το GCP Service Account του NodePool, escalating privileges in GCP.

container.pods.portForward

As explained in this page, με αυτά τα permissions μπορείτε να πρόσβαση σε local services που τρέχουν σε pods και που μπορεί να σας επιτρέψουν να escalate privileges in Kubernetes (και στο GCP αν με κάποιο τρόπο καταφέρετε να μιλήσετε στην metadata service).

container.serviceAccounts.createToken

Εξαιτίας του ονόματος του permission, φαίνεται ότι θα σας επιτρέψει να δημιουργήσετε tokens των K8s Service Accounts, οπότε θα μπορείτε να privesc to any SA μέσα στο Kubernetes. Ωστόσο, δεν μπόρεσα να βρω κάποιο API endpoint για να το χρησιμοποιήσω — πείτε μου αν το βρείτε.

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

Αυτά τα permissions μπορεί να σας επιτρέψουν να escal-άρετε προνόμια στο Kubernetes, αλλά πιο πιθανό είναι ότι μπορείτε να τα καταχραστείτε για να επιμένετε (persist) στο cluster.
Για περισσότερες πληροφορίες follow this link.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks