Уязвимость в Vim, приводящая к выполнению кода при открытии вредоносного файла

В текстовых редакторах Vim и Neovim найдена уязвимость (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-последовательности. Например, в данном прототипе эксплоита при открытии файла в vim создаётся сетевое соединение с shell-доступом на систему жертвы, но при этом данный файл не вызовет подозрений при выводе в терминал утилитой cat.

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

Дата: 2019-06-12 20:24:12

Источник: http://www.opennet.ru/opennews/art.shtml?num=50857