Poważna luka w edytorach Vim i NeoVim – podatne wersje na Linuksa i macOS-a

Maciej Olanicki , 13.06.2019 r.

Edytor Vim i jego fork NeoVim to bardzo popularne edytory tekstu wykorzystywane od wielu, wielu lat przez programistów na całym świecie. Niestety, w ostatnim czasie odnaleziono w nich niebezpieczną podatność, która może prowadzić do opuszczenia piaskownicy i wykonanie dowolnego kodu.

Podatne są wersje zarówno na Linuksa, gdzie została wydana już łatka, jak i na macOS-a. Wersja na komputery Apple wciąż jest podatna, niemniej aby atak był możliwy, konieczna jest na macOS-ie zmiana domyślnych ustawień. Chodzi o włączenie domyślnie wyłączonej funkcji modelines. Sytuacja jest tym groźniejsza, że w wielu dystrybucjach Linuksa znajdziemy preinstalowany pakiet Vima już z domyślnie włączoną obsługą modelines.

vim

Modelines pozwalają na ustawianie parametrów edytora przez plik. Wystarczy w pierwszej lub w ostatnich pięciu linijkach wprowadzić wartości dla określonych zmiennych, by zdecydować np. o tym, ile znaków w danym pliku powinno się zmieścić przed zawinięciem do kolejnej linijki czy jakie wymiary dla danego pliku powinno mieć okno. Przykład: /* vim: tw=60 ts=2: */ sprawi, że dany plik po otwarciu w Vimie czy NeoVimie będzie dopuszczał maksymalnie 60 znaków w linijce.

Zobacz też: Exim dziurawy – ponad połowa wszystkich serwerów poczty w niebezpieczeństwie

Jak nietrudno się domyślić, do ataku z wykorzystaniem podatności modelines wystarczy uruchomienie w edytorze odpowiednio spreparowanego pliku tekstowego. Co prawda Vim obsługuje tylko kilka ustawień modelines, zaś wartości zawierające wyrażenia wykonywane są w izolowanej piaskownicy. Jak jednak dowiódł użytkownik GitHuba przedstawiający się jako Arminius, wystarczy umieścić w modelines polecenie :source!, by opuścić piaskownicę.

Edytory co prawda blokują polecenie execute, ale i to zabezpieczenie udało się obejść. W rezultacie luka pozwala wykonanie kodu zupełnie tak, jakby polecenie zostało wprowadzone z poziomu konsoli. Użytkownikom Vima i NeoVima zaleca się jak najszybszą aktualizację, a ponadto wyłączenie obsługi modelines poprzez dodanie do pliku konfguracyjnego vima (.vimrc) linijek set modelines=0 oraz set nomodeline. Vim bezpieczny jest od wersji 8.1.1365, Neovim od v0.3.6.

Zobacz też: Thrangrycat: groźna sprzętowa podatność w milionach routerów Cisco

Najnowsze oferty pracy:

Polecane wpisy na blogu IT: