Tekstiredaktorites ja leitud (), mis vĂ”imaldab tĂ€itmist juhuslikku koodi, kui avatakse spetsiaalselt loodud fail. Probleem ilmneb vaikimisi lubatud modeline reĆŸiimi (â:set modelineâ) aktiivsuse korral, mis vĂ”imaldab mÀÀrata töötavas failis redigeerimise vĂ”imalusi. RĂŒnnakuvĂ”ime on likvideeritud vĂ€ljalaskes
ja .
Modeline'i kaudu on lubatud mÀÀrata ainult piiratud hulga vĂ”imalusi. Kui vĂ”imaluse vÀÀrtuseks on antud vĂ€ljend, siis see tĂ€idetakse santi reĆŸiimis, mis lubab kasutada ainult kĂ”ige lihtsamaid ohutuid toiminguid. Siiski kuulub lubatud hulka kĂ€sk â:sourceâ, kus saab kasutada modifikaatorit â!â, et kĂ€ivitada juhuslikke kĂ€ske nĂ€idatud failist. Seega on koodi tĂ€itmiseks piisav, kui modeline'i real on struktuur, mis nĂ€eb vĂ€lja nagu âset foldexpr=execute(â\:source! some_fileâ):â. Neovimis on execute'i kutsumine keelatud, kuid selle asemel vĂ”ib kasutada assert_fails.
NĂ€iteks kĂ€sk âuname -aâ tĂ€itmiseks on lihtsalt piisav avada Vim vĂ”i Neovim fail, mille esimene vĂ”i viimane rida on mĂ€rgitud:
:!uname -a||» vi:fen:fdm=expr:fde=assert_fails(«source\!\ \%»):fdl=0:fdt=»
KĂ€sk «source! %» loeb kĂ€sklusi jooksval failil ja vastavalt tĂ€idab «:!uname -a». Cat utiliitide vĂ€ljundi varjamiseks vĂ”idakse kasutada escape-jĂ€rjestusi. NĂ€iteks, selle tekstiga faili avamisel vim'is luuakse vĂ”rguĂŒhendus shell-priipÀÀsuga ohvri sĂŒsteemi, kuid see fail ei tekita suspicion cat utiliidi vĂ€ljundis.
Modeline reĆŸiimi aktiivsust saab kontrollida kĂ€suga «:set modeline?». Vimrc'is saab selle vĂ€ljalĂŒlitamiseks lisada rea «set nomodeline». Jaotistes on probleem eemaldatud , , , , , ja . Haavatavust ei ole parandatud (Debian'is on modeline vaikimisi vĂ€lja lĂŒlitatud, seega vaikimisi olekus haavatavus ei ilminga).
Allikas: opennet.ru
