Εντόπισαν μια ευπάθεια στο firejail που επέτρεπε την πρόσβαση root στο σύστημα

Πρόσφατα δημοσίευσαν την είδηση ​​ότι εντοπίστηκε μια ευπάθεια (αναφέρεται ήδη στο CVE-2022-31214) στο εργαλείο sandboxing της εφαρμογής Firejail, αναφέρεται λεπτομερώς ότι το ελάττωμα που εντοπίστηκε θα μπορούσε να επιτρέψει σε έναν τοπικό χρήστη να γίνει root στο κεντρικό σύστημα.

Το Firejail χρησιμοποιεί τον μηχανισμό των χώρων ονομάτων, το AppArmor και το φιλτράρισμα κλήσεων συστήματος (seccomp-bpf) στο Linux για απομόνωση, αλλά απαιτεί αυξημένα δικαιώματα για τη διαμόρφωση μιας απομονωμένης έκδοσης, τα οποία αποκτά δεσμεύοντας στο βοηθητικό πρόγραμμα σημαίας ρίζας suid ή εκτελώντας με sudo.

Η ευπάθεια οφείλεται σε σφάλμα στη λογική της επιλογής “–join=”. », έχει σχεδιαστεί για σύνδεση σε ένα απομονωμένο περιβάλλον που εκτελείται ήδη (παρόμοιο με την εντολή σύνδεσης για περιβάλλον sandbox) με το περιβάλλον που ορίζεται από το αναγνωριστικό της διαδικασίας που εκτελείται σε αυτό. Στη φάση πριν από την εκκίνηση, το firejail εντοπίζει τα προνόμια της καθορισμένης διαδικασίας και τα εφαρμόζει στη νέα διαδικασία που ενώνει το περιβάλλον με την επιλογή “–join”.

Πριν από τη σύνδεση, ελέγχει εάν η καθορισμένη διαδικασία εκτελείται στο περιβάλλον firejail. Αυτός ο έλεγχος αξιολογεί την ύπαρξη του αρχείου /run/firejail/mnt/join. Για την εκμετάλλευση της ευπάθειας, ένας εισβολέας μπορεί να προσομοιώσει ένα πλασματικό μη απομονωμένο περιβάλλον firejail χρησιμοποιώντας το χώρο ονομάτων προσάρτησης και, στη συνέχεια, συνδέεστε σε αυτόν χρησιμοποιώντας την επιλογή "--join".

Εάν η διαμόρφωση δεν ενεργοποιεί τη λειτουργία απαγόρευσης απόκτησης πρόσθετων προνομίων σε νέες διεργασίες (prctl NO_NEW_PRIVS), το firejail θα συνδέσει τον χρήστη σε ένα πλασματικό περιβάλλον και θα προσπαθήσει να εφαρμόσει τη διαμόρφωση χώρου ονομάτων χρήστη των αναγνωριστικών χρήστη (χρήστης χώρου ονομάτων) της διεργασίας init ( PID 1).

Το μεγαλύτερο μέρος της λογικής πίσω από τη λειτουργία σύνδεσης βρίσκεται στον πηγαίο κώδικα από το αρχείο `src/firejail/join.c`. Τα κρίσιμα τμήματα του κώδικα εκτελούνται με αυξημένα προνόμια (ισχύει UID 0). Το αναγνωριστικό της διαδικασίας πέρασε ως εντολή το όρισμα γραμμής επιθεωρείται για να προσδιοριστεί εάν είναι rδοχείο και να προσδιορίσετε μερικές από τις ιδιότητές του που Ισχύει και για τη νέα διαδικασία εισόδου.

Τα κύρια κριτήρια για να αποφασίσετε εάν θα συμμετάσχετε στη διαδικασία στόχο επιτυχία είναι η παρουσία ενός αρχείου στο χώρο ονομάτων προσάρτησης του στόχου, διαδικασία που βρέθηκε στο /run/firejail/mnt/join. Αυτή η επαλήθευση γίνεται στο fΣυνάρτηση `is_ready_for_join()`. Το αρχείο ανοίγει χρησιμοποιώντας lΟι σημαίες `O_RDONLY|O_CLOEXEC` και το αποτέλεσμα ίχνους `fstat()` θα πρέπει πληρούν τις ακόλουθες απαιτήσεις:

– το αρχείο πρέπει να είναι κανονικό αρχείο.
– το αρχείο πρέπει να ανήκει στο userid 0 (όπως φαίνεται από τον αρχικό χρήστη
χώρο ονομάτων).
– το αρχείο πρέπει να έχει μέγεθος 1 byte.

Ως αποτέλεσμα, η διαδικασία που συνδέεται μέσω του "firejail --join" θα καταλήξει στον χώρο ονομάτων αρχικό αναγνωριστικό χρήστη του χρήστη με αμετάβλητα προνόμια, αλλά σε διαφορετικό χώρο σημείου τοποθέτησης, πλήρως ελεγχόμενο από τον εισβολέα.

Το προκύπτον "ενωμένο" κέλυφος θα βρίσκεται πλέον στον αρχικό χρήστη
namespace, διατηρώντας ωστόσο τα αρχικά προνόμια κανονικού χρήστη ο χώρος ονομάτων προσάρτησης θα είναι αυτός που ελέγχεται από τον εισβολέα. Οπως και
η διαμόρφωση nonewprivs δεν έχει εφαρμοστεί, ο εισβολέας μπορεί τώρα
εκτελέστε προγράμματα setuid-root σε αυτόν τον χώρο ονομάτων προσάρτησης

Συγκεκριμένα, ένας εισβολέας μπορεί να εκτελέσει προγράμματα setuid-root στο χώρο του σημείου προσάρτησης που δημιούργησε, επιτρέποντάς του, για παράδειγμα, να αλλάξει τη διαμόρφωση /etc/sudoers ή τις παραμέτρους PAM στην ιεραρχία των αρχείων του και να αποκτήσει τη δυνατότητα να εκτελεί εντολές ως root χρησιμοποιώντας το sudo ή τα βοηθητικά του προγράμματα.

Τέλος, αξίζει να αναφέρουμε ότι έχει αναπτυχθεί ένα λειτουργικό exploit, δοκιμασμένο σε τρέχουσες εκδόσεις των openSUSE, Debian, Arch, Gentoo και Fedora με εγκατεστημένο το firejail utility.

Το πρόβλημα επιδιορθώθηκε στην έκδοση firejail 0.9.70. Ως επιδιόρθωση ασφαλείας, μπορείτε να ορίσετε τη διαμόρφωση (/etc/firejail/firejail.config) σε "no join" και "force-nonewprivs yes".

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


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

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

*

*

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