Kwesbaarheid in Vim wat lei tot die uitvoering van kode wanneer 'n kwaadwillige lêer oopgemaak word

В текстовых редакторах Vim и neovim gevind kwesbaarheid (CVE-2019-12735), позволяющая выполнить произвольный код при открытии специально оформленного файла. Проблема проявляется при активности включенного по умолчанию режима modeline («:set modeline»), который позволяет определить в обрабатываемом файле опции редактирования. Уязвимость устранена в выпусках
Vim 8.1.1365 и Neovim 0.3.6.

Через modeline допускается установка только ограниченного числа опций. Если в качестве значения опции указывается выражение, то оно выполняется в режиме sandbox, допускающем применение только простейших безопасных операций. При этом в число допустимых входит команда «:source», в которой можно использовать модификатор «!» для запуска произвольных команд из указанного файла. Таким образом для выполнения кода достаточно указать в строке modeline конструкцию вида «set foldexpr=execute(‘\:source! some_file’):». В Neovim вызов execute запрещён, но вместо него можно использовать assert_fails.

Например, для выполнения команды «uname -a» достаточно просто открыть в Vim или Neovim файл, в первой или последней строке которого указано:

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

Компанда «source! %» прочитает команды из текущего файла и, соответственно, выполнит «:!uname -a». Для скрытия данной строки от вывода утилитой cat могут использоваться escape-последовательности. Например, в данном prototipe te ontgin при открытии файла в vim создаётся сетевое соединение с shell-доступом на систему жертвы, но при этом данный файл не вызовет подозрений при выводе в терминал утилитой cat.

Проверить активность режима modeline можно командой «:set modeline?». Для отключения в vimrc можно добавить строку «set nomodeline». В дистрибутивах проблема устранена в RHEL, SUSE/openSUSE, Fedora, FreeBSD, Ubuntu, Arch Linux и ALT. Уязвимость остаётся неисправленной в Debian (в Debian modeline по умолчанию отключен, поэтому в состоянии по умолчанию уязвимость не проявляется).

Bron: opennet.ru

Voeg 'n opmerking