Μια ευπάθεια στην υλοποίηση της γλώσσας R που επιτρέπει την εκτέλεση κώδικα κατά την επεξεργασία αρχείων rds και rdx

Έχει εντοπιστεί μια κρίσιμη ευπάθεια (CVE-2024-27322) στην κύρια εφαρμογή της γλώσσας προγραμματισμού R, η οποία στοχεύει στην επίλυση προβλημάτων στατιστικής επεξεργασίας, ανάλυσης και οπτικοποίησης δεδομένων, οδηγώντας σε εκτέλεση κώδικα κατά την αποσειριοποίηση μη επαληθευμένων δεδομένων. Η ευπάθεια μπορεί να αξιοποιηθεί κατά την επεξεργασία ειδικά σχεδιασμένων αρχείων σε μορφές RDS (R Data Serialization) και RDX, που χρησιμοποιούνται για την ανταλλαγή δεδομένων μεταξύ εφαρμογών. Το πρόβλημα επιλύθηκε στην έκδοση R 4.4.0. Μπορείτε να παρακολουθείτε την κυκλοφορία των ενημερώσεων πακέτων σε διανομές στις σελίδες των Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD.

Η ευπάθεια προκαλείται από τη συνάρτηση readRDS, η οποία χρησιμοποιείται για τη φόρτωση αρχείων σε μορφές RDS και RDX, οι οποίες επιτρέπουν τη μεταφορά σειριακών αντικειμένων R για επεξεργασία σε άλλο σύστημα. Η σειριοποίηση καθιστά δυνατή την καταγραφή κατάστασης και την ανταλλαγή συνόλων δεδομένων μεταξύ προγραμμάτων. Η μορφή RDS σάς επιτρέπει να αποθηκεύετε κατάσταση για ένα αντικείμενο και η μορφή RDX σε συνδυασμό με αρχεία RDB καθιστά δυνατή τη μεταφορά πληροφοριών για πολλά αντικείμενα. Το πρόβλημα είναι ότι η μορφή RDS υποστηρίζει κώδικα αντικειμένου PROMSXP που σχετίζεται με τον τύπο Promise, ο οποίος χρησιμοποιείται για τον ορισμό εκφράσεων που καλούνται ασύγχρονα όταν χρησιμοποιούνται οι σχετικές τιμές τους.

Κατά τη διάρκεια της αποσειροποίησης, τρία μέρη χρησιμοποιούνται για τον ορισμό ενός αντικειμένου Promise—την τιμή Promise, την έκφραση και το περιβάλλον. Εάν ο τύπος Promise δεν έχει προ-υπολογισμένη τιμή, υπολογίζεται κατά την αποσειροποίηση εκτελώντας την έκφραση χρησιμοποιώντας τη συνάρτηση "eval". Με αυτόν τον τρόπο, ένας εισβολέας θα μπορούσε να προκαλέσει την εκτέλεση αυθαίρετου κώδικα R αντικαθιστώντας τον με μια έκφραση που σχετίζεται με μη υπολογισμένες τιμές σε αρχεία RDS ή RDX.

Πηγή: opennet.ru

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