Ευπάθεια πυρήνα Linux, επηρεάζοντας το πρωτόκολλο δικτύου CAN BCM

Στον πυρήνα Linux Εντοπίστηκε ένα θέμα ευπάθειας (CVE-2021-3609) που επιτρέπει σε έναν τοπικό χρήστη να κλιμακώσει τα δικαιώματά του στο σύστημα. Το πρόβλημα προκαλείται από μια συνθήκη κούρσας στην υλοποίηση του πρωτοκόλλου CAN BCM και υπάρχει σε εκδόσεις πυρήνα. Linux από την έκδοση 2.6.25 έως την έκδοση 5.13-rc6. Το πρόβλημα παραμένει άλυτο στις διανομές (RHEL, Fedora, Debian, Ubuntu, SUSE, Αρχιτέκτονας).

Ο ερευνητής που ανακάλυψε την ευπάθεια ήταν σε θέση να προετοιμάσει ένα exploit για να αποκτήσει δικαιώματα root σε συστήματα με πυρήνες. Linux 5.4 και νεότερες εκδόσεις, συμπεριλαμβανομένης της δυνατότητας επιτυχούς διεξαγωγής επίθεσης σε Ubuntu 20 Απριλίου 2002 LTS. Είναι πιθανό το exploit να μπορεί να αναδιαμορφωθεί ώστε να λειτουργεί με παλαιότερους πυρήνες (στον πυρήνα 5.4, ο κώδικας CAN BCM (net/can/bcm.c) μετακινήθηκε από το hrtimer_tasklet στο HRTIMER_MODE_SOFT).

Το πρωτόκολλο CAN BCM σάς επιτρέπει να καταχωρήσετε τον δικό σας χειριστή για μηνύματα που προέρχονται μέσω του διαύλου CAN (δίκτυο περιοχής ελεγκτή) και να τον συνδέσετε σε μια συγκεκριμένη υποδοχή δικτύου. Όταν φτάσει ένα εισερχόμενο μήνυμα, καλείται η συνάρτηση bcm_rx_handler(). Ένας εισβολέας μπορεί να εκμεταλλευτεί μια συνθήκη κούρσας και να επιτύχει το κλείσιμο της υποδοχής δικτύου ταυτόχρονα με την εκτέλεση της bcm_rx_handler(). Όταν η υποδοχή κλείσει, καλείται η συνάρτηση bcm_release(), στην οποία απελευθερώνεται η μνήμη που έχει διατεθεί για τις δομές bcm_op και bcm_sock, οι οποίες συνεχίζουν να χρησιμοποιούνται στον χειριστή bcm_rx_handler() που εξακολουθεί να εκτελείται. Προκύπτει μια κατάσταση που οδηγεί σε πρόσβαση σε ένα ήδη απελευθερωμένο μπλοκ μνήμης (use-after-free).

Η επίθεση συνίσταται στο άνοιγμα δύο υποδοχών CAN BCM και στη σύνδεσή τους με τη διεπαφή vcan. Το πρώτο socket εκτελεί μια κλήση sendmsg() με τη σημαία RX_SETUP για να ρυθμίσει τον χειριστή για τα εισερχόμενα μηνύματα CAN και το δεύτερο socket εκτελεί μια κλήση sendmsg() για να στείλει ένα μήνυμα στο πρώτο socket. Μόλις φτάσει το μήνυμα, ενεργοποιείται η κλήση bcm_rx_handler() και ο εισβολέας επιλέγει την κατάλληλη στιγμή και κλείνει το πρώτο socket, γεγονός που οδηγεί στην εκκίνηση της bcm_release() και στην απελευθέρωση των δομών bcm_op και bcm_sock, αν και η εργασία bcm_rx_handler() δεν έχει ακόμη ολοκληρωθεί.

Χειριζόμενος τα περιεχόμενα του bcm_sock, ένας εισβολέας μπορεί να επαναπροσδιορίσει τον δείκτη στη συνάρτηση sk->sk_data_ready(sk), να ανακατευθύνει την εκτέλεση και, χρησιμοποιώντας τον Προγραμματισμό με Προσανατολισμό στην Επιστροφή (ROP), να οργανώσει μια επανεγγραφή της παραμέτρου modprobe_path και να επιτύχει την εκτέλεση του κώδικά του με δικαιώματα root. Όταν χρησιμοποιεί την τεχνική ROP, ο εισβολέας δεν προσπαθεί να τοποθετήσει τον κώδικά του στη μνήμη, αλλά λειτουργεί σε τμήματα εντολών μηχανής που υπάρχουν ήδη σε φορτωμένες βιβλιοθήκες, καταλήγοντας σε μια εντολή επιστροφής (συνήθως, αυτοί είναι οι άκρες των συναρτήσεων της βιβλιοθήκης). Η εργασία του exploit καταλήγει στη δημιουργία μιας αλυσίδας κλήσεων σε τέτοια μπλοκ ("gadgets") για να αποκτήσει την επιθυμητή λειτουργικότητα.

Ευπάθεια πυρήνα Linux, επηρεάζοντας το πρωτόκολλο δικτύου CAN BCM

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

Πηγή: opennet.ru

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster