Μια ευπάθεια στο io_uring επέτρεψε σε έναν χρήστη χωρίς δικαιώματα να γίνει root ακόμα και σε κοντέινερ

Πρόσφατα αποκαλύφθηκαν πληροφορίες ευπάθειας (CVE-2022-29582) στην υλοποίηση της διεπαφής ασύγχρονης εισόδου/εξόδου io_uring, που περιλαμβάνεται στον πυρήνα του Linux από την έκδοση 5.1, η οποία επιτρέπει σε έναν μη προνομιούχο χρήστη να γίνει root στο σύστημα, ακόμη και όταν εκτελεί ένα exploit κοντέινερ.

Αξίζει να το αναφέρουμε είπε ότι η ευπάθεια αναφέρθηκε λίγο περισσότερο από 3 μήνες πριν (περίπου στις αρχές Μαΐου του τρέχοντος έτους), αλλά πλήρεις πληροφορίες και αποκάλυψη κυκλοφόρησαν μόλις πρόσφατα.

Σχετικά με την ευπάθεια, αναφέρεται ότι αυτό εμφανίζεται κατά την πρόσβαση σε ένα μπλοκ μνήμης που έχει ήδη ελευθερωθεί, εκδηλώνεται σε πυρήνες Linux ξεκινώντας από τον κλάδο 5.10.

Σχετικά με την ευπάθεια CVE-2022-29582

Αυτή η ευπάθεια επιτρέπει την πρόσβαση στην ελευθερωμένη μνήμη ως αποτέλεσμα μιας συνθήκης αγώνα κατά τον χειρισμό χρονικών ορίων στη συνάρτηση io_flush_timeouts(), η οποίαe καταργεί την καταχώρηση χρονικού ορίου από τη λίστα και την ακυρώνει, χωρίς να επαληθεύσει τη δημιουργία και τη διαγραφή του χρονικού ορίου σε εκείνο το σημείο.

Μια ενημερωμένη γενική περιγραφή του io_uring έχει ήδη παρασχεθεί από άλλους. Το εξηγούν χίλιες φορές καλύτερα από εμάς, επομένως θα καλύψουμε απλώς το υποσύστημα εκτενέστερα (δείτε αυτό το άρθρο Grapl Security και αυτό το άρθρο Flatt Security για μια εξαιρετική εισαγωγή).

Αυτό που είναι πιο σημαντικό, το πεδίο opcode καθορίζει τον τύπο λειτουργίας που θα εκτελεστεί. Για κάθε "opcode" που το απαιτεί, το πεδίο fd καθορίζει τον περιγραφέα αρχείου στον οποίο θα εκτελεστεί το ζητούμενο I/O. Σχεδόν όλες οι κανονικές κλήσεις συστήματος I/O (read, sendto, κ.λπ.) έχουν ισοδύναμο ασύγχρονο opcode. Κάθε πεδίο μπορεί να αναλάβει διαφορετικούς ρόλους ανάλογα με τη λειτουργία.

Μόλις ανακτηθεί από το SQ, ένα SQE μετατρέπεται σε μια εσωτερική αναπαράσταση που περιγράφεται από το struct io_kiocb (πυρήνα εισόδου/εξόδου κλήσης πίσω). Αυτά τα αντικείμενα είναι κοινώς γνωστά ως αιτήματα.

Το struct io_kiocb χρησιμοποιείται ως ισοδύναμο με το SQE "ready-for-launch" στο οποίο βασίζεται, όπου οποιοσδήποτε περιγραφέας αρχείου επιλύεται για τη δομή αρχείων*, επισυνάπτονται διαπιστευτήρια χρήστη, προσωπικότητα (στην οποία θα εκτελούνται πυρήνες) κ.λπ. .

Αφού ολοκληρωθεί η ζητούμενη λειτουργία, εγγράφεται στην ουρά ολοκλήρωσης (CQ) μια καταχώρηση που αντιστοιχεί στο SQE. Μια τέτοια καταχώρηση ονομάζεται καταχώρηση ουράς ολοκλήρωσης (CQE) και περιέχει πεδία όπως κωδικό σφάλματος και τιμή αποτελέσματος. Η εφαρμογή χώρου χρήστη μπορεί να μετρήσει το CQ για νέες εγγραφές για να προσδιορίσει εάν τα απεσταλμένα SQE έχουν ολοκληρώσει την επεξεργασία και ποιο ήταν το αποτέλεσμά τους.

Αναφέρεται ότι υπάρχουν ορισμένα σενάρια στα οποία είναι εύκολο να αντικαταστήσετε ένα αντικείμενο σχετικά με την πρόοδο. Υπάρχουν όμως δύο περιορισμοί:

  • Το LT' πρέπει να εκχωρηθεί και να αρχικοποιηθεί σε ένα παράθυρο αγώνα. Δηλαδή, αφού απελευθερωθεί το LT αλλά πριν φτάσει σε ένα σημείο του LT που δεν είναι πλέον προσβάσιμο.
  • Το LT' μπορεί να είναι μόνο ένα άλλο αντικείμενο struct io_kiocb. Λόγω της απομόνωσης σωρού, όπου τα αντικείμενα στο σωρό διαχωρίζονται ανάλογα με τον τύπο τους, είναι πολύ δύσκολο να τα επαναπροσδιορίσετε ως διαφορετικό είδος αντικειμένου εντός του παραθύρου του αγώνα.

Οι ερευνητές ετοίμασαν μια λειτουργική εκμετάλλευση που δεν απαιτεί τη συμπερίληψη χώρων ονομάτων με αναγνωριστικό χρήστη (user namespaces) για τη λειτουργία του και μπορεί να παρέχει πρόσβαση root στον κεντρικό υπολογιστή όταν ένας μη προνομιούχος χρήστης εκκινεί το exploit σε ένα απομονωμένο κοντέινερ.

Η εκμετάλλευσή μας στοχεύει την έκδοση 5.10.90 του πυρήνα, την έκδοση που εκτελούσε εξ αποστάσεως η Google εκείνη την εποχή. Έπρεπε να προσαρμόσουμε την εκμετάλλευσή μας στις ιδιαίτερες προδιαγραφές του διακομιστή (4 πυρήνες Skylake Xeon @ 2.80Ghz, 16GiB RAM), αλλά με κάποια προσαρμογή, κάθε μηχανή που εκτελεί έναν ευάλωτο πυρήνα θα πρέπει να είναι εκμεταλλεύσιμη.

Το exploit λειτουργεί επίσης στο περιβάλλον nsjail απομονώνεται στη διανομή Google COS (Container Optimized OS) που βασίζεται στο Chromium OS και χρησιμοποιείται στο Google Cloud Platform σε εικονικές μηχανές Compute Engine. Το exploit έχει σχεδιαστεί για να λειτουργεί με κλάδους πυρήνα από 5.10 έως 5.12. Τέλος, αξίζει να αναφέρουμε ότι το πρόβλημα επιδιορθώθηκε τον Απρίλιο στις ενημερώσεις 5.10.111, 5.15.34 και 5.17.3.

Τέλος, εάν ενδιαφέρεστε να μάθετε περισσότερα για την ευπάθεια, μπορείτε να συμβουλευτείτε τη δημοσίευση που έγινε Στον ακόλουθο σύνδεσμο.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: AB Internet Networks 2008 SL
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.