Δυναμικός φορτωτής
Η ουσία του προβλήματος: κατά τη λειτουργία, το ld.so εξάγει πρώτα την τιμή της μεταβλητής LD_LIBRARY_PATH από το περιβάλλον και, χρησιμοποιώντας τη συνάρτηση _dl_split_path(), τη μετατρέπει σε μια σειρά από συμβολοσειρές - διαδρομές προς καταλόγους. Εάν αργότερα αποδειχθεί ότι η τρέχουσα διαδικασία έχει ξεκινήσει από μια εφαρμογή SUID/SGID, τότε ο δημιουργημένος πίνακας και, στην πραγματικότητα, η μεταβλητή LD_LIBRARY_PATH διαγράφονται. Ταυτόχρονα, εάν η μνήμη _dl_split_path() εξαντληθεί (το οποίο είναι δύσκολο λόγω του ρητού ορίου των 256 kB στο μέγεθος των μεταβλητών περιβάλλοντος, αλλά είναι θεωρητικά δυνατό), τότε η μεταβλητή _dl_libpath θα λάβει την τιμή NULL και επακόλουθο έλεγχο της τιμής αυτής της μεταβλητής θα προκαλέσει παράλειψη της κλήσης στο _dl_unsetenv("LD_LIBRARY_PATH").
Ευπάθεια που εντοπίστηκε από ειδικούς
Προσθήκη: Στο πρόβλημα έχει εκχωρηθεί ένας αριθμός
amd64 και i386 (το exploit μπορεί να προσαρμοστεί για άλλες αρχιτεκτονικές).
Το ζήτημα είναι εκμεταλλεύσιμο στην προεπιλεγμένη εγκατάσταση και επιτρέπει σε έναν μη προνομιούχο τοπικό χρήστη να εκτελεί κώδικα ως root μέσω αντικατάστασης βιβλιοθήκης κατά την εκτέλεση των βοηθητικών προγραμμάτων chpass ή passwd suid. Για να δημιουργήσετε τις συνθήκες χαμηλής μνήμης που είναι απαραίτητες για τη λειτουργία, ορίστε το όριο RLIMIT_DATA μέσω του setrlimit.
Πηγή: opennet.ru