Ευπάθεια στην Python κατά τον χειρισμό μη επικυρωμένων κλασματικών αριθμών σε ctypes

Διατίθενται διορθωτικές εκδόσεις της γλώσσας προγραμματισμού Python 3.7.10 και 3.6.13, οι οποίες διορθώνουν ένα θέμα ευπάθειας (CVE-2021-3177) που θα μπορούσε να οδηγήσει σε εκτέλεση κώδικα κατά την επεξεργασία μη επικυρωμένων αριθμών κινητής υποδιαστολής σε χειριστές που καλούν συναρτήσεις C χρησιμοποιώντας τον μηχανισμό ctypes . Το πρόβλημα επηρεάζει επίσης τους κλάδους Python 3.8 και 3.9, αλλά οι ενημερώσεις για αυτές εξακολουθούν να είναι σε κατάσταση υποψήφιας κυκλοφορίας (η κυκλοφορία έχει προγραμματιστεί για την 1η Μαρτίου).

Το πρόβλημα προκαλείται από μια υπερχείλιση buffer στη συνάρτηση ctypes PyCArg_repr(), η οποία προκύπτει λόγω μη ασφαλούς χρήσης του sprintf. Συγκεκριμένα, ένα στατικό buffer μεγέθους 256 byte ("char buffer" [256]"), ενώ το αποτέλεσμα θα μπορούσε να υπερβεί αυτήν την τιμή. Για να ελέγξετε την ευπάθεια των εφαρμογών στην ευπάθεια, μπορείτε να δοκιμάσετε να περάσετε την τιμή "1e300", η οποία, όταν υποβληθεί σε επεξεργασία με τη μέθοδο c_double.from_param, θα οδηγήσει σε σφάλμα, καθώς ο αριθμός που προκύπτει περιέχει 308 χαρακτήρες και δεν ταιριάζει σε Buffer 256 byte. Παράδειγμα προβληματικού κώδικα: εισαγωγή ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Το πρόβλημα παραμένει άλυτο στο Debian, το Ubuntu και το FreeBSD, αλλά έχει ήδη επιδιορθωθεί στο Arch Linux, Fedora, SUSE. Στο RHEL, η ευπάθεια δεν εμφανίζεται λόγω της συναρμολόγησης πακέτου σε λειτουργία FORTIFY_SOURCE, η οποία αποκλείει τέτοιες υπερχειλίσεις buffer σε συναρτήσεις συμβολοσειράς.

Πηγή: opennet.ru

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