GCP - Container Privesc

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

container

container.clusters.get

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

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

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

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

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

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 από προεπιλογή αποτρέπει τους χρήστες από το να μπορούν να δημιουργήσουν ή ενημερώσουν Roles και ClusterRoles με περισσότερες άδειες από αυτές που έχει ο χρήστης. Ωστόσο, ένας χρήστης του GCP με αυτές τις άδειες θα μπορεί να δημιουργήσει/ενημερώσει Roles/ClusterRoles με περισσότερες άδειες από αυτές που διαθέτει, παρακάμπτοντας αποτελεσματικά την προστασία του Kubernetes έναντι αυτής της συμπεριφοράς.

Οι άδειες container.roles.create και/ή container.roles.update Ή container.clusterRoles.create και/ή container.clusterRoles.update αντίστοιχα είναι επίσης απαραίτητες για την εκτέλεση αυτών των ενεργειών προϋπόθεσης προνομιούχου προαγωγής.

container.roles.bind | container.clusterRoles.bind

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

Οι άδειες container.roleBindings.create και/ή container.roleBindings.update Ή container.clusterRoleBindings.create και/ή container.clusterRoleBindings.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

Όλες αυτές οι άδειες θα σας επιτρέψουν να δημιουργήσετε ή να ενημερώσετε ένα πόρο όπου μπορείτε να ορίσετε ένα pod. Ορίζοντας ένα pod μπορείτε να καθορίσετε τον SA που θα είναι συνδεδεμένος και την εικόνα που θα εκτελεστεί, επομένως μπορείτε να εκτελέσετε μια εικόνα που θα διαρρεύσει το token του SA στον διακομιστή σας, επιτρέποντάς σας να προωθηθείτε σε οποιοδήποτε λογαριασμό υπηρεσίας. Για περισσότερες πληροφορίες, ανατρέξτε στο:

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

container.secrets.get | container.secrets.list

Με αυτές τις άδειες μπορείτε να διαβάσετε τα tokens όλων των SAs του Kubernetes, επομένως μπορείτε να προωθηθείτε σε αυτά.

container.pods.exec

Με αυτήν την άδεια θα μπορείτε να εκτελέσετε εντολές στα pods, πράγμα που σας δίνει πρόσβαση σε όλα τα Kubernetes SAs που εκτελούνται στα pods για να αναβαθμίσετε τα προνόμια εντός του K8s, αλλά επίσης θα μπορείτε να κλέψετε το GCP Service Account του NodePool, ανεβάζοντας τα προνόμια στο GCP.

container.pods.portForward

Όπως εξηγείται σε αυτήν τη σελίδα, με αυτές τις άδειες μπορείτε να έχετε πρόσβαση σε τοπικές υπηρεσίες που εκτελούνται σε pods που μπορεί να σας επιτρέψουν να αναβαθμίσετε προνόμια στο Kubernetes (και στο GCP αν καταφέρετε να επικοινωνήσετε με την υπηρεσία μεταδεδομένων).

container.serviceAccounts.createToken

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

container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update

Αυτές οι άδειες μπορεί να σας επιτρέψουν να αναβαθμίσετε τα προνόμια στο Kubernetes, αλλά πιθανότερα μπορείτε να

Last updated