Ευπάθειες στο OpenBSD που επιτρέπουν την κλιμάκωση των προνομίων και την παράκαμψη ελέγχου ταυτότητας σε smtpd, ldapd και radiusd

Qualys Company αποκάλυψε τέσσερα τρωτά σημεία στο OpenBSD, ένα από τα οποία σας επιτρέπει να συνδεθείτε απομακρυσμένα χωρίς έλεγχο ταυτότητας σε ορισμένες υπηρεσίες δικτύου και οι άλλες τρεις να αυξήσουν τα προνόμιά τους στο σύστημα. Η αναφορά Qualys σημείωσε την ταχεία απόκριση των προγραμματιστών του OpenBSD - όλα τα προβλήματα ήταν εξαλειφθεί в OpenBSD 6.5 и OpenBSD 6.6 εντός 40 ωρών από την ιδιωτική ειδοποίηση.

Η απομακρυσμένα εκμεταλλεύσιμη ευπάθεια προκαλείται από ένα σφάλμα κατά την τακτοποίηση της κλήσης προς τον χειριστή ελέγχου ταυτότητας στη βιβλιοθήκη libc, η οποία καλεί
Πρόγραμμα /usr/libexec/auth/login_style που μεταβιβάζει ορίσματα στη γραμμή εντολών. Συμπεριλαμβανομένης της κλήσης login_style με χρήση της προαιρετικής παραμέτρου "-s service", επιτρέπεται η μετάδοση του ονόματος του πρωτοκόλλου. Εάν χρησιμοποιείται ένας χαρακτήρας "-" στην αρχή του ονόματος χρήστη, αυτό το όνομα θα αντιμετωπίζεται ως επιλογή όταν εκτελείται το login_style. Αντίστοιχα, εάν καθορίσετε "-schallenge" ή "-schallenge: passwd" ως όνομα χρήστη κατά τη διάρκεια του ελέγχου ταυτότητας, τότε το login_style θα αντιληφθεί το αίτημα ως αίτημα για χρήση του προγράμματος χειρισμού S/Key.

Το πρόβλημα είναι ότι το πρωτόκολλο S/Key στο login_style υποστηρίζεται μόνο τυπικά, αλλά στην πραγματικότητα αγνοείται με την έξοδο μιας ένδειξης επιτυχούς ελέγχου ταυτότητας. Έτσι, ένας εισβολέας μπορεί να παρουσιαστεί ως ο χρήστης "-schallenge" και να παρακάμψει τον έλεγχο ταυτότητας και να αποκτήσει πρόσβαση χωρίς να καθορίσει κωδικό πρόσβασης ή κλειδιά. Όλες οι υπηρεσίες δικτύου που χρησιμοποιούν τακτικές κλήσεις libc για έλεγχο ταυτότητας ενδέχεται να επηρεαστούν από το πρόβλημα. Για παράδειγμα, η δυνατότητα παράκαμψης του ελέγχου ταυτότητας επιβεβαιώνεται σε smtpd (AUTH PLAIN), ldapd και radiusd.

Η ευπάθεια δεν εκδηλώνεται στο sshd, αφού έχει πρόσθετη προστασία με τον έλεγχο της παρουσίας του χρήστη στο σύστημα. Ωστόσο, το sshd μπορεί να χρησιμοποιηθεί για να ελέγξει εάν ένα σύστημα είναι επιρρεπές σε μια ευπάθεια - κατά την πρόσβαση στο όνομα χρήστη "-sresponse:passwd", η σύνδεση κλείνει, καθώς το sshd περιμένει για login_passwd για να επιστρέψει τις παραμέτρους της κλήσης (πρόκληση) και login_passwd περιμένει για τη μεταφορά των παραμέτρων που λείπουν (το όνομα "- sresponse" λαμβάνεται ως επιλογή). Ένας πιθανός τοπικός εισβολέας θα μπορούσε να προσπαθήσει να παρακάμψει τον έλεγχο ταυτότητας στο βοηθητικό πρόγραμμα su, αλλά η μετάδοση του ονόματος "-sresponse" προκαλεί τη διακοπή λειτουργίας της διαδικασίας λόγω της επιστροφής ενός μηδενικού δείκτη κατά την εκτέλεση της συνάρτησης getpwnam_r("-schallenge", ...) .

Άλλα τρωτά σημεία:

  • CVE-2019-19520 - Τοπική κλιμάκωση προνομίων μέσω χειρισμού του βοηθητικού προγράμματος xlock που συνοδεύει τη σημαία sgid που αλλάζει την ομάδα σε "auth". Στον κώδικα xlock, ο επαναπροσδιορισμός των διαδρομών της βιβλιοθήκης απαγορεύεται μόνο όταν αλλάξει το αναγνωριστικό χρήστη (setuid), το οποίο επιτρέπει στον εισβολέα να αλλάξει τη μεταβλητή περιβάλλοντος "LIBGL_DRIVERS_PATH" και να οργανώσει τη φόρτωση της κοινόχρηστης βιβλιοθήκης του, ο κώδικας της οποίας θα εκτελεστεί μετά από κλιμάκωση προνομίων στην ομάδα «auth».
  • CVE-2019-19522 - Επιτρέπει σε έναν τοπικό χρήστη στην ομάδα "auth" να εκτελεί κώδικα ως root όταν ο έλεγχος ταυτότητας S/Key ή YubiKey είναι ενεργοποιημένος στο σύστημα (δεν είναι ενεργοποιημένος από προεπιλογή). Το να είσαι μέλος της ομάδας "auth", στην οποία μπορεί να προσπελαστεί με την εκμετάλλευση της παραπάνω ευπάθειας xlock, επιτρέπει την εγγραφή αρχείων στους καταλόγους /etc/skey και /var/db/yubikey. Για παράδειγμα, ένας εισβολέας θα μπορούσε να προσθέσει ένα νέο αρχείο /etc/skey/root για να δημιουργήσει κλειδιά μιας χρήσης για έλεγχο ταυτότητας root μέσω S/Key.
  • CVE-2019-19519 - Δυνατότητα αύξησης των ορίων πόρων μέσω χειρισμών με το βοηθητικό πρόγραμμα. Κατά τον καθορισμό της επιλογής "-L", η οποία συνεπάγεται μια κυκλική επανάληψη των προσπαθειών ελέγχου ταυτότητας σε περίπτωση αποτυχίας, η κλάση χρήστη ορίζεται μόνο μία φορά και δεν επαναρυθμίζεται σε επόμενες προσπάθειες. Ένας εισβολέας μπορεί να εκτελέσει το "su -l -L" στην πρώτη προσπάθεια να εισαγάγει τα στοιχεία σύνδεσης κάποιου άλλου με διαφορετική κατηγορία λογαριασμού, αλλά στη δεύτερη προσπάθεια επιτυχούς ελέγχου ταυτότητας κάτω από τον εαυτό του. Σε αυτήν την περίπτωση, ο χρήστης θα ορίσει όρια που αντιστοιχούν στην κατηγορία χρήστη που καθορίστηκε στην πρώτη προσπάθεια (για παράδειγμα, ο μέγιστος αριθμός διεργασιών ή το μέγεθος μνήμης για μια διεργασία). Η μέθοδος λειτουργεί μόνο για όρια δανεισμού από μη προνομιούχους χρήστες, καθώς ο χρήστης root πρέπει να βρίσκεται στην ομάδα τροχών).

Επιπλέον, μπορεί να σημειωθεί εκτέλεση στο OpenBSD μια νέα μέθοδος για τον έλεγχο της εγκυρότητας των κλήσεων συστήματος, περιπλέκοντας περαιτέρω την εκμετάλλευση των τρωτών σημείων. Η μέθοδος επιτρέπει την εκτέλεση κλήσεων συστήματος μόνο εάν γίνεται πρόσβαση σε αυτές από προηγουμένως καταχωρημένες περιοχές μνήμης. Για να επισημάνετε περιοχές μνήμης προτείνεται νέα κλήση συστήματος msyscall().

Πηγή: opennet.ru