Ευπάθεια στο Vim που οδηγεί σε εκτέλεση κώδικα κατά το άνοιγμα ενός κακόβουλου αρχείου

Σε προγράμματα επεξεργασίας κειμένου ζωτικότητα и neovim βρέθηκαν τρωτό (CVE-2019-12735), που επιτρέπει την εκτέλεση αυθαίρετου κώδικα κατά το άνοιγμα ενός ειδικά σχεδιασμένου αρχείου. Το πρόβλημα παρουσιάζεται όταν είναι ενεργή η προεπιλεγμένη λειτουργία μοντέλου (“:set modeline”), η οποία σας επιτρέπει να ορίσετε επιλογές επεξεργασίας στο επεξεργασμένο αρχείο. Διορθώθηκε η ευπάθεια στις εκδόσεις
Vim 8.1.1365 и Neovim 0.3.6.

Μόνο ένας περιορισμένος αριθμός επιλογών μπορεί να εγκατασταθεί μέσω του modeline. Εάν μια παράσταση έχει καθοριστεί ως τιμή επιλογής, εκτελείται σε λειτουργία sandbox, η οποία επιτρέπει μόνο τις απλούστερες ασφαλείς λειτουργίες. Σε αυτήν την περίπτωση, η έγκυρη εντολή περιλαμβάνει την εντολή “:source”, στην οποία μπορείτε να χρησιμοποιήσετε τον τροποποιητή “!”. για να εκτελέσετε αυθαίρετες εντολές από το καθορισμένο αρχείο. Έτσι, για να εκτελέσετε τον κώδικα, αρκεί να υποδείξετε στη γραμμή μοντέλου μια κατασκευή όπως "set foldexpr=execute('\:source! some_file'):". Στο Neovim, η κλήση εκτέλεσης απαγορεύεται, αλλά μπορεί να χρησιμοποιηθεί το assert_fails.

Για παράδειγμα, για να εκτελέσετε την εντολή "uname -a", απλά ανοίξτε ένα αρχείο στο Vim ή στο Neovim του οποίου η πρώτη ή η τελευταία γραμμή λέει:

:!uname -a||» vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

Εταιρεία «πηγή! %" θα διαβάσει τις εντολές από το τρέχον αρχείο και αναλόγως θα εκτελέσει το ":!uname -a". Οι ακολουθίες διαφυγής μπορούν να χρησιμοποιηθούν για την απόκρυψη μιας δεδομένης γραμμής από την έξοδο από το βοηθητικό πρόγραμμα cat. Για παράδειγμα, σε αυτό exploit πρωτότυπο κατά το άνοιγμα ενός αρχείου στο vim, δημιουργείται μια σύνδεση δικτύου με πρόσβαση κελύφους στο σύστημα του θύματος, αλλά αυτό το αρχείο δεν θα προκαλέσει υποψίες κατά την έξοδο στο τερματικό χρησιμοποιώντας το βοηθητικό πρόγραμμα cat.

Μπορείτε να ελέγξετε τη δραστηριότητα της λειτουργίας μοντέλου με την εντολή “:set modeline?”. Για να το απενεργοποιήσετε, μπορείτε να προσθέσετε τη γραμμή "set nomodeline" στο vimrc. Στις διανομές το πρόβλημα επιλύεται RHEL, SUSE/openSUSE, Μαλακό καπέλλο, FreeBSD, Ubuntu, Arch Linux и ALT. Η ευπάθεια παραμένει μη επιδιορθωμένη Debian (στο Debian το μοντέλο είναι απενεργοποιημένο από προεπιλογή, επομένως η ευπάθεια δεν εμφανίζεται στην προεπιλεγμένη κατάσταση).

Πηγή: opennet.ru

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