Уразлівасць у Vim, якая прыводзіць да выканання кода пры адкрыцці шкоднаснага файла

У тэкставых рэдактарах напор и Неавім знойдзена уразлівасць (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, Мяккая фетравы капялюш, FreeBSD, Ubuntu, Arch Linux и ALT. Уразлівасць застаецца невыпраўленай у Debian (у Debian modeline па змаўчанні адключаны, таму ў стане па змаўчанні ўразлівасць не выяўляецца).

Крыніца: opennet.ru

Дадаць каментар