release_agent exploit - Relative Paths to PIDs
Για περαιτέρω λεπτομέρειες ελέγξτε την ανάρτηση στο ιστολόγιο από το https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Αυτό είναι απλώς ένα σύνοψη:
Η τεχνική περιγράφει έναν τρόπο για εκτέλεση κώδικα του κεντρικού συστήματος από ένα container, ξεπερνώντας τις προκλήσεις που προκύπτουν από τις ρυθμίσεις του storage-driver που αποκρύπτουν τη διαδρομή του αρχείου συστήματος του container στον κεντρικό υπολογιστή, όπως τα Kata Containers ή συγκεκριμένες ρυθμίσεις devicemapper
.
Βασικά βήματα:
Εντοπισμός αναγνωριστικών διεργασιών (PIDs): Χρησιμοποιώντας τον συμβολικό σύνδεσμο
/proc/<pid>/root
στο ψευδο-σύστημα αρχείων του Linux, οποιοδήποτε αρχείο μέσα στο container μπορεί να προσπελαστεί σχετικά με το αρχείο συστήματος του κεντρικού υπολογιστή. Αυτό παρακάμπτει την ανάγκη γνώσης της διαδρομής του αρχείου συστήματος του container στον κεντρικό υπολογιστή.Επίθεση στα PIDs: Χρησιμοποιείται μια επίθεση με βία για να αναζητηθούν τα PIDs στον κεντρικό υπολογιστή. Αυτό γίνεται ελέγχοντας σειριακά την παρουσία ενός συγκεκριμένου αρχείου στη διαδρομή
/proc/<pid>/root/<file>
. Όταν βρεθεί το αρχείο, υποδηλώνει ότι το αντίστοιχο PID ανήκει σε μια διεργασία που εκτελείται μέσα στον επιθετικό στόχο container.Εκτέλεση: Η εκτιμώμενη διαδρομή του PID γράφεται στο αρχείο
cgroups release_agent
. Αυτή η ενέργεια εκτελεί την εκτέλεση τουrelease_agent
. Η επιτυχία αυτού του βήματος επιβεβαιώνεται ελέγχοντας τη δημιουργία ενός αρχείου εξόδου.
Διαδικασία εκμετάλλευσης
Η διαδικασία εκμετάλλευσης περιλαμβάνει ένα πιο λεπτομερές σύνολο ενεργειών, με στόχο την εκτέλεση ενός φορτίου στον κεντρικό υπολογιστή με την εκτίμηση του σωστού PID μιας διεργασίας που εκτελείται μέσα στο container. Ακολούθως παρουσιάζεται η διαδικασία:
Αρχικοποίηση Περιβάλλοντος: Ένα σενάριο φορτίου (
payload.sh
) προετοιμάζεται στον κεντρικό υπολογιστή και δημιουργείται ένας μοναδικός κατάλογος για τον έλεγχο του cgroup.Προετοιμασία Φορτίου: Το σενάριο φορτίου, που περιέχει τις εντολές που θα εκτελεστούν στον κεντρικό υπολογιστή, γράφεται και γίνεται εκτελέσιμο.
Δημιουργία Cgroup: Το cgroup προσαρτάται και ρυθμίζεται. Η σημαία
notify_on_release
ορίζεται για να διασφαλιστεί η εκτέλεση του φορτίου όταν απελευθερωθεί το cgroup.Επίθεση στα PIDs: Ένας βρόχος επανάληψης περνάει από τα πιθανά PIDs, γράφοντας κάθε εκτιμώμενο PID στο αρχείο
release_agent
. Αυτό θέτει το σενάριο φορτίου ωςrelease_agent
.Εκτέλεση και Έλεγχος: Για κάθε PID, γράφεται στο
cgroup.procs
του cgroup, εκτελώντας τοrelease_agent
εάν το PID είναι σωστό. Ο βρόχος συνεχίζει μέχρι να βρεθεί η έξοδος του σεναρίου φορτίου, υποδεικνύοντας επιτυχή εκτέλεση.
PoC από την ανάρτηση στο ιστολόγιο:
Last updated