Dirty Pipe: μια ευπάθεια που επιτρέπει την αντικατάσταση δεδομένων

Πρόσφατα τα νέα το έσπασαν εντοπίστηκε μια ευπάθεια στον πυρήνα του Linux και το οποίο είναι ήδη καταγεγραμμένο στο CVE-2022-0847 και το οποίο έχουν ονομάσει ως "Dirty Pipe".

Αυτή η ευπάθεια ονομάστηκε "Dirty Pipe"επιτρέπει την αντικατάσταση των περιεχομένων της κρυφής μνήμης της σελίδας για οποιοδήποτε αρχείο, συμπεριλαμβανομένων εκείνων που έχουν οριστεί μόνο για ανάγνωση, που ανοίγουν με τη σημαία O_RDONLY ή βρίσκονται σε συστήματα αρχείων που έχουν προσαρτηθεί μόνο για ανάγνωση.

Από την πρακτική πλευρά, η ευπάθεια θα μπορούσε να χρησιμοποιηθεί για την εισαγωγή κώδικα σε αυθαίρετες διαδικασίες ή κατεστραμμένα δεδομένα σε ανοιχτά αρχεία. Για παράδειγμα, μπορείτε να αλλάξετε το περιεχόμενο του αρχείου authorized_keys για τη διαδικασία sshd.

Σχετικά με το Dirty Pipe

Είναι παρόμοιο με την κρίσιμη ευπάθεια Dirty COW εντοπίστηκε το 2016 και το Dirty Pipe αναφέρεται ότι βρίσκεται στο ίδιο επίπεδο με το Dirty COW από άποψη κινδύνου, αλλά ότι αυτό είναι πολύ πιο εύκολο να λειτουργήσει.

Το Dirty Pipe εντοπίστηκε κατά την ανάλυση καταγγελιών για περιοδικές ζημιές σε αρχεία λήφθηκε μέσω του δικτύου σε ένα σύστημα που κατεβάζει συμπιεσμένα αρχεία από έναν διακομιστή καταγραφής (37 ζημιές σε 3 μήνες σε ένα φορτωμένο σύστημα), τα οποία προετοιμάστηκαν χρησιμοποιώντας τη λειτουργία splice() και σωλήνες χωρίς όνομα.

Τρωτό έχει εμφανιστεί από την έκδοση 5.8 του πυρήνα Linux, κυκλοφόρησε τον Αύγουστο του 2020.

Με άλλο τρόπο μπορούμε να πούμε ότι υπάρχει στο Debian 11 αλλά δεν επηρεάζει τον βασικό πυρήνα στο Ubuntu 20.04 LTS, ενώ για RHEL 8.x και openSUSE/SUSE 15 πυρήνες που βασίζονται αρχικά σε παλιούς κλάδους, αλλά είναι δυνατό ότι η αλλαγή που προκαλεί το πρόβλημα έχει μεταφερθεί σε αυτούς (δεν υπάρχουν ακόμη ακριβή δεδομένα).

Η ευπάθεια οφείλεται στην έλλειψη προετοιμασίας της τιμής "buf->flags" στον κώδικα των συναρτήσεων copy_page_to_iter_pipe() και push_pipe(), παρά το γεγονός ότι η μνήμη δεν εκκαθαρίζεται όταν εκχωρείται η δομή και με ορισμένους χειρισμούς με ανώνυμα σωλήνες, το "buf->flag" μπορεί να περιέχει μια τιμή από άλλη λειτουργία. Με αυτήν τη δυνατότητα, ένας μη προνομιούχος τοπικός χρήστης μπορεί να επιτύχει την εμφάνιση της τιμής PIPE_BUF_FLAG_CAN_MERGE στη σημαία, επιτρέποντάς του να αντικαταστήσει δεδομένα στη μνήμη cache της σελίδας απλώς γράφοντας νέα δεδομένα σε έναν ειδικά προετοιμασμένο σωλήνα χωρίς όνομα.

για επίθεση μπορεί να γίνει, χρειάζεστε ένα αρχείο προορισμού που πρέπει να είναι αναγνώσιμο και επειδή τα δικαιώματα πρόσβασης δεν ελέγχονται κατά την εγγραφή σε σωλήνα, μπορεί να γίνει αντικατάσταση στη μνήμη cache σελίδων, ακόμη και για αρχεία που βρίσκονται σε διαμερίσματα μόνο για ανάγνωση (για παράδειγμα, για c αρχεία CD-ROM).

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

Αναφέρεται ότι η λειτουργία Dirty Pipe καταλήγει στη δημιουργία ενός ανώνυμου σωλήνα και στην πλήρωσή του με αυθαίρετα δεδομένα για να επιτύχετε τη ρύθμιση της σημαίας PIPE_BUF_FLAG_CAN_MERGE σε όλες τις δομές δακτυλίου που σχετίζονται με αυτό.

Στη συνέχεια, τα δεδομένα διαβάζονται από το σωλήνα, αλλά η σημαία παραμένει καθορισμένη σε όλες τις παρουσίες της δομής pipe_buffer στις δομές δακτυλίου pipe_inode_info. Στη συνέχεια γίνεται μια κλήση στη splice() για να διαβάσει τα δεδομένα από το αρχείο προορισμού σε έναν άγνωστο σωλήνα, ξεκινώντας από την απαιτούμενη μετατόπιση. Κατά την εγγραφή δεδομένων σε αυτόν τον μη κατονομασμένο σωλήνα, η σημαία PIPE_BUF_FLAG_CAN_MERGE θα αντικαταστήσει τα δεδομένα στη μνήμη cache της σελίδας αντί να δημιουργήσει μια νέα παρουσία της δομής pipe_buffer.

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

Επίσης, αν σας ενδιαφέρει να είναι σε θέση να παρακολουθεί ή να γνωρίζει τη δημοσίευση των ενημερώσεων των πακέτων στις κύριες διανομές, μπορείτε να το κάνετε από αυτές τις σελίδες: DebianSUSEUbuntuRHELΜαλακό καπέλλοGentooArchLinux.

Αναφέρεται ότι η προτεινόμενη διόρθωση ευπάθειας είναι διαθέσιμη στις εκδόσεις Linux Kernel 5.16.11, 5.15.25 και 5.10.102 και η επιδιόρθωση περιλαμβάνεται επίσης στον πυρήνα που χρησιμοποιείται στην πλατφόρμα Android.


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

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

*

*

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