GCP - Container Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
container.clusters.get
Αυτή η άδεια επιτρέπει να συγκεντρωθούν διαπιστευτήρια για το Kubernetes cluster χρησιμοποιώντας κάτι όπως:
Χωρίς επιπλέον δικαιώματα, τα διαπιστευτήρια είναι αρκετά βασικά καθώς μπορείτε να καταγράψετε κάποιους πόρους, αλλά είναι χρήσιμα για να βρείτε κακώς διαμορφωμένες ρυθμίσεις στο περιβάλλον.
Σημειώστε ότι οι κλάδοι kubernetes μπορεί να είναι διαμορφωμένοι ως ιδιωτικοί, κάτι που θα απαγορεύσει την πρόσβαση στον Kube-API server από το Διαδίκτυο.
Αν δεν έχετε αυτό το δικαίωμα, μπορείτε ακόμα να αποκτήσετε πρόσβαση στον κλάδο, αλλά πρέπει να δημιουργήσετε το δικό σας αρχείο ρυθμίσεων kubectl με τις πληροφορίες των κλάδων. Ένα νέο που έχει δημιουργηθεί φαίνεται έτσι:
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 με αυτές τις άδειες θα είναι σε θέση να δημιουργήσει/ενημερώσει RolesBindings/ClusterRolesBindings με περισσότερες άδειες από αυτές που έχει, παρακάμπτοντας αποτελεσματικά την προστασία του 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, θα μπορείτε επίσης να λάβετε το nodepool GCP SA από την υπηρεσία metadata και να ανυψώσετε προνόμια στο GCP (κατά προεπιλογή χρησιμοποιείται το compute SA).
container.secrets.get
| container.secrets.list
Όπως εξηγείται σε αυτή τη σελίδα, με αυτές τις άδειες μπορείτε να διαβάσετε τα tokens όλων των SAs του kubernetes, έτσι μπορείτε να ανυψώσετε σε αυτά.
container.pods.exec
Με αυτή την άδεια θα είστε σε θέση να exec σε pods, που σας δίνει πρόσβαση σε όλα τα Kubernetes SAs που εκτελούνται σε pods για να ανυψώσετε προνόμια εντός του K8s, αλλά επίσης θα μπορείτε να κλέψετε το GCP Service Account του NodePool, ανυψώνοντας προνόμια στο GCP.
container.pods.portForward
Όπως εξηγείται σε αυτή τη σελίδα, με αυτές τις άδειες μπορείτε να έχετε πρόσβαση σε τοπικές υπηρεσίες που εκτελούνται σε pods που μπορεί να σας επιτρέψουν να ανυψώσετε προνόμια στο Kubernetes (και στο GCP αν με κάποιο τρόπο καταφέρετε να μιλήσετε με την υπηρεσία metadata).
container.serviceAccounts.createToken
Λόγω του ονόματος της άδειας, φαίνεται ότι θα σας επιτρέψει να δημιουργήσετε tokens των K8s Service Accounts, έτσι θα μπορείτε να privesc σε οποιοδήποτε SA μέσα στο Kubernetes. Ωστόσο, δεν μπόρεσα να βρω κανένα API endpoint για να το χρησιμοποιήσω, οπότε ενημερώστε με αν το βρείτε.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Αυτές οι άδειες μπορεί να σας επιτρέψουν να ανυψώσετε προνόμια στο Kubernetes, αλλά πιο πιθανό, θα μπορούσατε να τις εκμεταλλευτείτε για να επιμείνετε στο cluster. Για περισσότερες πληροφορίες ακολουθήστε αυτόν τον σύνδεσμο.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)