Κρίσιμη ευπάθεια στο Wasmtime, χρόνος εκτέλεσης για εφαρμογές WebAssembly

Οι διορθωτικές ενημερώσεις Wasmtime 6.0.1, 5.0.1 και 4.0.1 διόρθωσαν την ευπάθεια (CVE-2023-26489), στην οποία εκχωρήθηκε ένα κρίσιμο επίπεδο κινδύνου. Η ευπάθεια επιτρέπει την εγγραφή δεδομένων σε μια περιοχή μνήμης εκτός των ορίων που επιτρέπονται για απομονωμένο κώδικα WebAssembly, ο οποίος θα μπορούσε ενδεχομένως να χρησιμοποιηθεί από έναν εισβολέα για να εκτελέσει τον κώδικά του έξω από το απομονωμένο περιβάλλον WASI.

Το Wasmtime είναι ένας χρόνος εκτέλεσης για την εκτέλεση εφαρμογών WebAssembly με επεκτάσεις WASI (WebAssembly System Interface) ως κανονικές αυτόνομες εφαρμογές. Η εργαλειοθήκη είναι γραμμένη στη γλώσσα Rust και η ευπάθεια προκαλείται από ένα λογικό σφάλμα στον καθορισμό κανόνων διευθυνσιοδότησης γραμμικής μνήμης στη γεννήτρια κώδικα Cranelift, η οποία μεταφράζει μια ενδιάμεση αναπαράσταση ανεξάρτητη από αρχιτεκτονικές υλικού σε εκτελέσιμο κώδικα μηχανής για την αρχιτεκτονική x86_64.

Ειδικότερα, για τις εφαρμογές WebAssembly, υπολογίστηκαν αποτελεσματικές διευθύνσεις 35 bit αντί για τις διευθύνσεις 33 bit που επιτρέπονται στο WebAssembly, το οποίο μετατόπισε το όριο εικονικής μνήμης που επιτρέπεται για λειτουργίες ανάγνωσης και εγγραφής στα 34 GB, ενώ οι ρυθμίσεις περιβάλλοντος sandbox παρέχουν προστασία για 6 GB από τη διεύθυνση βάσης. Ως αποτέλεσμα, το εύρος εικονικής μνήμης από 6 έως 34 GB από τη βασική διεύθυνση ήταν διαθέσιμο για ανάγνωση και εγγραφή από εφαρμογές WebAssembly. Αυτή η μνήμη μπορεί να φιλοξενήσει άλλα περιβάλλοντα WebAssembly ή στοιχεία χρόνου εκτέλεσης WebAssembly.

Εάν δεν είναι δυνατή η ενημέρωση της έκδοσης Wasmtime, μια λύση για τον αποκλεισμό του σφάλματος είναι να ορίσετε την επιλογή "Config::static_memory_maximum_size(0)" για να ενεργοποιήσετε έναν ξεχωριστό έλεγχο ορίων σε όλες τις προσβάσεις γραμμικής μνήμης (με αποτέλεσμα σημαντική ποινή απόδοσης) . Μια άλλη επιλογή είναι να χρησιμοποιήσετε τη ρύθμιση "Config::static_memory_guard_size(1 < 36)" για να αυξήσετε τον αριθμό των Guard Pages (μια εξαίρεση κατά την πρόσβαση) που τοποθετούνται στο προβληματικό εύρος εικονικής μνήμης (με αποτέλεσμα να διατηρείται μεγάλη ποσότητα εικονικής μνήμης και περιορίζοντας τον αριθμό που εκτελούνται ταυτόχρονα εφαρμογές WebAssembly).

Πηγή: opennet.ru

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