В текстовите редактори и е открита (), което позволява изпълнението на произволен код при отваряне на специално форматиран файл. Проблемът се проявява при активност на включения по подразбиране режим modeline („:set modeline“), който позволява да се определят опции за редактиране в обработвания файл. Уязвимостта е отстранена в изданията
и .
През 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“. В дистрибуциите проблемът е отстранен в , , , , , и . Уязвимостта остава непоправена в (в Debian modeline по подразбиране е изключен, така че в състояние по подразбиране уязвимостта не се проявява).
Източник: opennet.ru
