GCP - Container Privesc
container
container.clusters.get
container.clusters.get
Αυτή η άδεια επιτρέπει την συλλογή διαπιστευτηρίων για το Kubernetes cluster χρησιμοποιώντας κάτι όπως:
Χωρίς επιπλέον δικαιώματα, τα διαπιστευτήρια είναι αρκετά βασικά καθώς μπορείτε απλώς να καταλογογραφήσετε κάποιο πόρο, αλλά είναι χρήσιμα για να βρείτε λανθασμένες ρυθμίσεις στο περιβάλλον.
Σημειώστε ότι οι συστάδες Kubernetes μπορεί να έχουν ρυθμιστεί ως ιδιωτικές, πράγμα που θα απαγορεύει την πρόσβαση στον διακομιστή Kube-API από το Διαδίκτυο.
Αν δεν έχετε αυτήν την άδεια, μπορείτε ακόμα να έχετε πρόσβαση στη συστάδα, αλλά χρειάζεστε να δημιουργήσετε το δικό σας αρχείο διαμόρφωσης kubectl με τις πληροφορίες των συστάδων. Ένα νεοδημιουργημένο αρχείο φαίνεται όπως αυτό:
container.roles.escalate
| container.clusterRoles.escalate
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
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
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
container.secrets.get
| container.secrets.list
Με αυτές τις άδειες μπορείτε να διαβάσετε τα tokens όλων των SAs του Kubernetes, επομένως μπορείτε να προωθηθείτε σε αυτά.
container.pods.exec
container.pods.exec
Με αυτήν την άδεια θα μπορείτε να εκτελέσετε εντολές στα pods, πράγμα που σας δίνει πρόσβαση σε όλα τα Kubernetes SAs που εκτελούνται στα pods για να αναβαθμίσετε τα προνόμια εντός του K8s, αλλά επίσης θα μπορείτε να κλέψετε το GCP Service Account του NodePool, ανεβάζοντας τα προνόμια στο GCP.
container.pods.portForward
container.pods.portForward
Όπως εξηγείται σε αυτήν τη σελίδα, με αυτές τις άδειες μπορείτε να έχετε πρόσβαση σε τοπικές υπηρεσίες που εκτελούνται σε pods που μπορεί να σας επιτρέψουν να αναβαθμίσετε προνόμια στο Kubernetes (και στο GCP αν καταφέρετε να επικοινωνήσετε με την υπηρεσία μεταδεδομένων).
container.serviceAccounts.createToken
container.serviceAccounts.createToken
Λόγω του ονόματος της άδειας, φαίνεται ότι θα σας επιτρέπει να δημιουργήσετε τα tokens των K8s Service Accounts, έτσι θα μπορείτε να αναβαθμίσετε τα προνόμια σε οποιοδήποτε SA μέσα στο Kubernetes. Ωστόσο, δεν μπόρεσα να βρω κανένα API endpoint για να το χρησιμοποιήσω, οπότε πείτε μου αν το βρείτε.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
Αυτές οι άδειες μπορεί να σας επιτρέψουν να αναβαθμίσετε τα προνόμια στο Kubernetes, αλλά πιθανότερα μπορείτε να
Last updated