Μια ευπάθεια PolKit επέτρεψε την απόκτηση πρόσβασης root στις περισσότερες διανομές Linux

Πρόσφατα του Qualy κυκλοφόρησε την είδηση ​​ότι έχει εντοπίσει μια ευπάθεια (CVE-2021-4034) en συστατικό του συστήματος Πόλκιτ (πρώην PolicyKit), το οποίο χρησιμοποιείται σε διανομές για να επιτρέπει στους μη προνομιούχους χρήστες να εκτελούν ενέργειες που απαιτούν αυξημένα δικαιώματα πρόσβασης.

Τρωτό επιτρέπει σε έναν μη προνομιούχο τοπικό χρήστη να ανυψώσει τα προνόμιά του στον χρήστη root και αποκτήστε πλήρη έλεγχο του συστήματος. Το ζήτημα έχει την κωδική ονομασία PwnKit και είναι αξιοσημείωτο για την παραγωγή ενός λειτουργικού exploit που εκτελείται στις προεπιλεγμένες ρυθμίσεις στις περισσότερες διανομές Linux.

Αναφέρεται ότι το πρόβλημα υπάρχει στο βοηθητικό πρόγραμμα pkexec που περιλαμβάνεται στο PolKit, το οποίο συνοδεύεται από τη σημαία ρίζας SUID και έχει σχεδιαστεί για να εκτελεί εντολές με τα προνόμια άλλων χρηστών σύμφωνα με τους κανόνες του PolKit.

Λόγω λανθασμένου χειρισμού επιχειρημάτων από τη γραμμή εντολών που μεταβιβάστηκε στο pkexec, α μη προνομιούχος χρήστης θα μπορούσε να παρακάμψει τον έλεγχο ταυτότητας και να εκτελέσει τον κώδικά σας ως root, ανεξάρτητα από τους καθιερωμένους κανόνες πρόσβασης. Για μια επίθεση, ανεξάρτητα από τις ρυθμίσεις και τους περιορισμούς που έχουν οριστεί στο PolKit, αρκεί να οριστεί το χαρακτηριστικό ρίζας SUID για το εκτελέσιμο αρχείο με το βοηθητικό πρόγραμμα pkexec.

Το Pkexec δεν ελέγχει την ορθότητα του αριθμού των ορισμάτων της γραμμής εντολών (argc) που διαβιβάστηκαν κατά την έναρξη μιας διαδικασίας. Οι προγραμματιστές του pkexec υπέθεσαν ότι η πρώτη καταχώρηση στον πίνακα argv περιέχει πάντα το όνομα της διεργασίας (pkeexec) και η δεύτερη καταχώρηση είναι είτε NULL είτε το όνομα της εντολής που εκτελείται μέσω του pkeexec.

Δεδομένου ότι το πλήθος ορισμάτων δεν συγκρίθηκε με το πραγματικό περιεχόμενο του πίνακα και θεωρήθηκε ότι ήταν πάντα μεγαλύτερο από 1, εάν ένας κενός πίνακας argv μεταβιβαζόταν στη διαδικασία, κάτι που επιτρέπει η συνάρτηση execve του Linux, το pkexec αντιμετώπισε το NULL ως το πρώτο όρισμα ( διεργασία όνομα), και το επόμενο μετά εκτός buffer μνήμης, ως το επόμενο περιεχόμενο πίνακα.

Το πρόβλημα είναι ότι μετά τον πίνακα argv στη μνήμη βρίσκεται ο πίνακας envp που περιέχει τις μεταβλητές περιβάλλοντος. Έτσι, με έναν κενό πίνακα argv, το pkeexec εξάγει τα δεδομένα σχετικά με την εντολή που εκτελείται με αυξημένα δικαιώματα από το πρώτο στοιχείο του πίνακα με μεταβλητές περιβάλλοντος (το argv[1] έγινε πανομοιότυπο με το envp[0]), του οποίου το περιεχόμενο μπορεί να ελεγχθεί από ο επιτιθέμενος.

Έχοντας λάβει την τιμή argv[1], το pkexec προσπαθεί να προσδιορίσει την πλήρη διαδρομή προς το εκτελέσιμο αρχείο χρησιμοποιώντας τις διαδρομές αρχείου στο PATH και γράφει τον δείκτη στη συμβολοσειρά με την πλήρη διαδρομή πίσω στο argv[1], η οποία οδηγεί στην αντικατάσταση της τιμής της πρώτης μεταβλητής περιβάλλοντος επίσης, καθώς το argv[1] είναι πανομοιότυπο με το envp[0]. Με το χειρισμό του ονόματος της πρώτης μεταβλητής περιβάλλοντος, ένας εισβολέας μπορεί να αντικαταστήσει μια άλλη μεταβλητή περιβάλλοντος στο pkexec, για παράδειγμα, να αντικαταστήσει τη μεταβλητή περιβάλλοντος "LD_PRELOAD", η οποία δεν επιτρέπεται σε προγράμματα suid και να φορτώσει τη διαδικασία στην κοινόχρηστη βιβλιοθήκη της στη διαδικασία .

Η εκμετάλλευση εκμετάλλευσης χρησιμοποιεί αντικατάσταση μεταβλητής GCONV_PATH, που χρησιμοποιείται για τον προσδιορισμό της διαδρομής προς τη βιβλιοθήκη διακωδικοποίησης συμβόλων που φορτώνεται δυναμικά όταν καλείται η συνάρτηση g_printerr(), η οποία χρησιμοποιεί iconv_open() στον κώδικά της.

Με τον επαναπροσδιορισμό της διαδρομής στο GCONV_PATH, ο εισβολέας μπορεί να καταφέρει να φορτώσει όχι την κανονική βιβλιοθήκη iconv, αλλά τη δική του βιβλιοθήκη, τα προγράμματα οδήγησης της οποίας θα εκτελεστούν κατά τη διάρκεια του μηνύματος σφάλματος στο στάδιο όπου το pkeexec εξακολουθεί να εκτελείται ως root και πριν από την επαλήθευση των δικαιωμάτων εκκίνησης.

Παρατηρείται ότι, αν και το πρόβλημα οφείλεται σε καταστροφή της μνήμης, μπορεί να αξιοποιηθεί αξιόπιστα και επαναλαμβανόμενα, ανεξάρτητα από την αρχιτεκτονική υλικού που χρησιμοποιείται.

Η εκμετάλλευση προετοιμάστηκε δοκιμάστηκε με επιτυχία σε Ubuntu, Debian, Fedora και CentOS, αλλά μπορεί επίσης να χρησιμοποιηθεί σε άλλες διανομές. Η αρχική εκμετάλλευση δεν είναι ακόμη δημόσια διαθέσιμη, γεγονός που υποδεικνύει ότι είναι ασήμαντο και μπορεί να αναδημιουργηθεί εύκολα από άλλους ερευνητές, επομένως είναι σημαντικό να εγκαταστήσετε την ενημέρωση της επείγουσας επιδιόρθωσης το συντομότερο δυνατό σε συστήματα πολλών χρηστών.

Το Polkit είναι επίσης διαθέσιμο για συστήματα BSD και Solaris, αλλά δεν έχει διερευνηθεί για εκμετάλλευση. Αυτό που είναι γνωστό είναι ότι η επίθεση δεν μπορεί να εκτελεστεί στο OpenBSD, καθώς ο πυρήνας του OpenBSD δεν επιτρέπει τη μετάδοση μιας τιμής null argc κατά την κλήση της execve().

Το πρόβλημα υπάρχει από τον Μάιο του 2009, όταν προστέθηκε η εντολή pkexec. Η επιδιόρθωση για την ευπάθεια στο PolKit εξακολουθεί να είναι διαθέσιμη ως ενημέρωση κώδικα (η έκδοση επιδιόρθωσης δεν έχει διαμορφωθεί), αλλά επειδή οι προγραμματιστές της διανομής ειδοποιήθηκαν εκ των προτέρων για το πρόβλημα, οι περισσότερες διανομές κυκλοφόρησαν μια ενημέρωση ταυτόχρονα. πληροφορίες ευπάθειας.

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


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

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

*

*

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