Pentesting Kubernetes Services
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)
Το Kubernetes χρησιμοποιεί αρκετές συγκεκριμένες υπηρεσίες δικτύου που μπορεί να βρείτε εκτεθειμένες στο Διαδίκτυο ή σε ένα εσωτερικό δίκτυο μόλις έχετε παραβιάσει ένα pod.
Ένας τρόπος θα μπορούσε να είναι η αναζήτηση για Identity LIKE "k8s.%.com"
στο crt.sh για να βρείτε υποτομείς σχετικούς με το kubernetes. Ένας άλλος τρόπος μπορεί να είναι η αναζήτηση "k8s.%.com"
στο github και η αναζήτηση για YAML αρχεία που περιέχουν τη συμβολοσειρά.
Μπορεί να είναι χρήσιμο για εσάς να κατανοήσετε πώς το Kubernetes μπορεί να εκθέσει υπηρεσίες δημόσια προκειμένου να τις βρείτε:
Exposing Services in KubernetesΟι παρακάτω θύρες μπορεί να είναι ανοιχτές σε ένα Kubernetes cluster:
443/TCP
kube-apiserver
Θύρα API Kubernetes
2379/TCP
etcd
6666/TCP
etcd
etcd
4194/TCP
cAdvisor
Μετρήσεις κοντέινερ
6443/TCP
kube-apiserver
Θύρα API Kubernetes
8443/TCP
kube-apiserver
Θύρα API Minikube
8080/TCP
kube-apiserver
Ανασφαλής θύρα API
10250/TCP
kubelet
HTTPS API που επιτρέπει πλήρη πρόσβαση
10255/TCP
kubelet
Μη αυθεντικοποιημένη θύρα HTTP μόνο για ανάγνωση: pods, τρέχοντα pods και κατάσταση κόμβου
10256/TCP
kube-proxy
Διακομιστής ελέγχου υγείας Kube Proxy
9099/TCP
calico-felix
Διακομιστής ελέγχου υγείας για Calico
6782-4/TCP
weave
Μετρήσεις και τελικοί προορισμοί
30000-32767/TCP
NodePort
Proxy στις υπηρεσίες
44134/TCP
Tiller
Υπηρεσία Helm που ακούει
Αυτή είναι η υπηρεσία API Kubernetes με την οποία οι διαχειριστές επικοινωνούν συνήθως χρησιμοποιώντας το εργαλείο kubectl
.
Κοινές θύρες: 6443 και 443, αλλά και 8443 στο minikube και 8080 ως ανασφαλής.
Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς να αποκτήσετε ευαίσθητα δεδομένα και να εκτελέσετε ευαίσθητες ενέργειες επικοινωνώντας με αυτή την υπηρεσία:
Kubernetes EnumerationΑυτή η υπηρεσία τρέχει σε κάθε κόμβο του κλάστερ. Είναι η υπηρεσία που θα ελέγχει τα pods μέσα στον κόμβο. Επικοινωνεί με τον kube-apiserver.
Αν βρείτε αυτή την υπηρεσία εκτεθειμένη, μπορεί να έχετε βρει μια μη αυθεντικοποιημένη RCE.
Αν η απάντηση είναι Unauthorized
, τότε απαιτείται αυθεντικοποίηση.
Αν μπορείτε να καταγράψετε κόμβους, μπορείτε να αποκτήσετε μια λίστα με τα endpoints kubelets με:
Μπορείτε να καταχραστείτε αυτή την υπηρεσία για να κλιμακώσετε τα δικαιώματα μέσα στο Kubernetes:
Υπηρεσία χρήσιμη για τη συλλογή μετρήσεων.
Όταν μια θύρα εκτίθεται σε όλους τους κόμβους μέσω ενός NodePort, η ίδια θύρα ανοίγει σε όλους τους κόμβους προξενώντας την κίνηση στην δηλωμένη Υπηρεσία. Από προεπιλογή, αυτή η θύρα θα είναι στην εμβέλεια 30000-32767. Έτσι, νέες μη ελεγμένες υπηρεσίες μπορεί να είναι προσβάσιμες μέσω αυτών των θυρών.
Η ανώνυμη πρόσβαση στα kube-apiserver API endpoints δεν επιτρέπεται. Αλλά μπορείτε να ελέγξετε μερικά endpoints:
Το ETCD αποθηκεύει τα μυστικά του cluster, τα αρχεία ρυθμίσεων και περισσότερα ευαίσθητα δεδομένα. Από προεπιλογή, το ETCD δεν μπορεί να προσπελαστεί ανώνυμα, αλλά είναι πάντα καλό να ελέγξετε.
Εάν το ETCD μπορεί να προσπελαστεί ανώνυμα, ίσως χρειαστεί να χρησιμοποιήσετε το etcdctl εργαλείο. Η παρακάτω εντολή θα αποκτήσει όλα τα κλειδιά που είναι αποθηκευμένα:
Η τεκμηρίωση Kubelet εξηγεί ότι από προεπιλογή η ανώνυμη πρόσβαση στην υπηρεσία είναι επιτρεπτή:
Ενεργοποιεί ανώνυμες αιτήσεις στον διακομιστή Kubelet. Αιτήσεις που δεν απορρίπτονται από άλλη μέθοδο πιστοποίησης θεωρούνται ανώνυμες αιτήσεις. Οι ανώνυμες αιτήσεις έχουν όνομα χρήστη
system:anonymous
και όνομα ομάδαςsystem:unauthenticated
Για να κατανοήσετε καλύτερα πώς λειτουργεί η πιστοποίηση και εξουσιοδότηση του Kubelet API, ελέγξτε αυτή τη σελίδα:
Kubelet Authentication & AuthorizationΗ API υπηρεσίας Kubelet δεν είναι τεκμηριωμένη, αλλά ο πηγαίος κώδικας μπορεί να βρεθεί εδώ και η εύρεση των εκτεθειμένων endpoints είναι τόσο εύκολη όσο το τρέξιμο:
Όλοι τους ακούγονται ενδιαφέροντες.
Μπορείτε να χρησιμοποιήσετε το Kubeletctl εργαλείο για να αλληλεπιδράσετε με τα Kubelets και τα endpoints τους.
Αυτό το endpoint παραθέτει pods και τα containers τους:
Αυτό το endpoint επιτρέπει την εκτέλεση κώδικα μέσα σε οποιοδήποτε container πολύ εύκολα:
Για να αποφευχθεί αυτή η επίθεση, η υπηρεσία kubelet θα πρέπει να εκτελείται με --anonymous-auth false
και η υπηρεσία θα πρέπει να είναι διαχωρισμένη σε επίπεδο δικτύου.
Όταν μια θύρα kubelet μόνο για ανάγνωση είναι εκτεθειμένη, καθίσταται δυνατή η ανάκτηση πληροφοριών από το API από μη εξουσιοδοτημένα μέρη. Η έκθεση αυτής της θύρας μπορεί να οδηγήσει στην αποκάλυψη διαφόρων στοιχείων διαμόρφωσης του cluster. Αν και οι πληροφορίες, συμπεριλαμβανομένων των ονόματων pod, τοποθεσιών εσωτερικών αρχείων και άλλων διαμορφώσεων, μπορεί να μην είναι κρίσιμες, η έκθεσή τους εξακολουθεί να θέτει σε κίνδυνο την ασφάλεια και θα πρέπει να αποφεύγεται.
Ένα παράδειγμα του πώς μπορεί να εκμεταλλευτεί αυτή η ευπάθεια περιλαμβάνει έναν απομακρυσμένο επιτιθέμενο που αποκτά πρόσβαση σε μια συγκεκριμένη διεύθυνση URL. Με την πλοήγηση στη διεύθυνση http://<external-IP>:10255/pods
, ο επιτιθέμενος μπορεί ενδεχομένως να ανακτήσει ευαίσθητες πληροφορίες από το kubelet:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)