Τοπικά τρωτά σημεία ρίζας στο κιτ εργαλείων διαχείρισης πακέτων Snap

Η Qualys εντόπισε δύο τρωτά σημεία (CVE-2021-44731, CVE-2021-44730) στο βοηθητικό πρόγραμμα snap-confine, τα οποία παρέχονται με τη σημαία ρίζας SUID και καλούνται από τη διαδικασία snapd για τη δημιουργία ενός εκτελέσιμου περιβάλλοντος για εφαρμογές που παραδίδονται σε αυτόνομα σε μορφή snap. Τα τρωτά σημεία επιτρέπουν σε έναν τοπικό μη προνομιούχο χρήστη να εκτελεί κώδικα με δικαιώματα root στο σύστημα. Τα ζητήματα επιλύθηκαν στη σημερινή ενημέρωση πακέτου snapd για τα Ubuntu 21.10, 20.04 και 18.04.

Η πρώτη ευπάθεια (CVE-2021-44730) επιτρέπει μια επίθεση μέσω χειρισμού σκληρού συνδέσμου, αλλά απαιτεί απενεργοποίηση της προστασίας σκληρού συνδέσμου συστήματος (ρύθμιση του sysctl fs.protected_hardlinks σε 0). Το πρόβλημα προκαλείται από εσφαλμένη επαλήθευση της θέσης των εκτελέσιμων αρχείων των βοηθητικών προγραμμάτων snap-update-ns και snap-discard-ns που εκτελούνται ως root. Η διαδρομή προς αυτά τα αρχεία υπολογίστηκε στη συνάρτηση sc_open_snapd_tool() με βάση τη δική της διαδρομή από το /proc/self/exe, η οποία σας επιτρέπει να δημιουργήσετε έναν σκληρό σύνδεσμο για snap-confine στον κατάλογό σας και να τοποθετήσετε τις δικές σας εκδόσεις του snap- update-ns και snap- βοηθητικά προγράμματα σε αυτόν τον κατάλογο discard-ns. Μετά την εκτέλεση μέσω ενός σκληρού συνδέσμου, το snap-confine με δικαιώματα root θα εκκινήσει τα αρχεία snap-update-ns και snap-discard-ns από τον τρέχοντα κατάλογο, τα οποία θα αντικατασταθούν από τον εισβολέα.

Η δεύτερη ευπάθεια προκαλείται από μια συνθήκη φυλής και μπορεί να χρησιμοποιηθεί στην προεπιλεγμένη διαμόρφωση του Ubuntu Desktop. Για να λειτουργήσει επιτυχώς το exploit στον Ubuntu Server, πρέπει να επιλέξετε ένα από τα πακέτα από την ενότητα "Featured Server Snaps" κατά την εγκατάσταση. Η συνθήκη αγώνα είναι εμφανής στη συνάρτηση setup_private_mount() που καλείται κατά την προετοιμασία του χώρου ονομάτων του σημείου προσάρτησης για το πακέτο snap. Αυτή η συνάρτηση δημιουργεί έναν προσωρινό κατάλογο "/tmp/snap.$SNAP_NAME/tmp" ή χρησιμοποιεί έναν υπάρχοντα κατάλογο για τη σύνδεση-προσάρτηση καταλόγων για ένα πακέτο snap σε αυτόν.

Δεδομένου ότι το όνομα του προσωρινού καταλόγου είναι προβλέψιμο, ένας εισβολέας μπορεί να αντικαταστήσει το περιεχόμενό του με έναν συμβολικό σύνδεσμο αφού ελέγξει τον ιδιοκτήτη, αλλά πριν καλέσει την κλήση συστήματος προσάρτησης. Για παράδειγμα, μπορείτε να δημιουργήσετε έναν συμβολικό σύνδεσμο "/tmp/snap.lxd/tmp" στον κατάλογο /tmp/snap.lxd που δείχνει σε έναν αυθαίρετο κατάλογο και μια κλήση στο mount() θα ακολουθήσει τον συμβολικό σύνδεσμο και θα προσαρτήσει τον κατάλογο στον snap χώρο ονομάτων. Με παρόμοιο τρόπο, μπορείτε να προσαρτήσετε τα περιεχόμενά σας στο /var/lib και, αντικαθιστώντας το /var/lib/snapd/mount/snap.snap-store.user-fstab, να οργανώσετε την προσάρτηση του καταλόγου σας /etc στον χώρο ονομάτων του το πακέτο snap για να οργανώσετε τη φόρτωση της βιβλιοθήκης σας με δικαιώματα root αντικαθιστώντας το /etc/ld.so.preload.

Σημειώνεται ότι η δημιουργία ενός exploit αποδείχθηκε μια μη τετριμμένη εργασία, καθώς το βοηθητικό πρόγραμμα snap-confine είναι γραμμένο στο Go χρησιμοποιώντας τεχνικές ασφαλούς προγραμματισμού, έχει προστασία βάσει προφίλ AppArmor, φιλτράρει κλήσεις συστήματος με βάση τον μηχανισμό seccomp και χρησιμοποιεί ο χώρος ονομάτων της βάσης για απομόνωση. Ωστόσο, οι ερευνητές μπόρεσαν να προετοιμάσουν ένα λειτουργικό exploit για να αποκτήσουν δικαιώματα root στο σύστημα. Ο κώδικας εκμετάλλευσης θα δημοσιευτεί σε λίγες εβδομάδες αφού οι χρήστες εγκαταστήσουν τις παρεχόμενες ενημερώσεις.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο