KDE4/5命令执行漏洞(CVE-2019-14744)简析-创新互联
作者:
HACHp1@知道创宇404实验室
日期: 2019/08/08
原文链接: https://paper.seebug.org/1006/
创新互联建站是专业的任县网站建设公司,任县接单;提供成都做网站、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行任县网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!漏洞简介
KDE Frameworks是一套由KDE社群所编写的库及软件框架,是KDE Plasma 5及KDE Applications 5的基础,并使用GNU通用公共许可证进行发布。其中所包含的多个独立框架提供了各种常用的功能,包括了硬件集成、文件格式支持、控件、绘图功能、拼写检查等。KDE框架目前被几个Linux发行版所采用,包括了Kubuntu、OpenMandriva、openSUSE和OpenMandriva。
2019年7月28日Dominik Penner(@zer0pwn)发现了KDE framework版本<=5.60.0时存在命令执行漏洞。
2019年8月5日Dominik Penner在Twitter上披露了该漏洞,而此时该漏洞还是0day漏洞。此漏洞由KDesktopFile类处理.desktop或.directory文件的方式引起。如果受害者下载了恶意构造的.desktop或.directory文件,恶意文件中注入的bash代码就会被执行。
2019年8月8日,KDE社区终于在发布的更新中修复了该漏洞;在此之前的三天内,此漏洞是没有官方补丁的。
一些八卦
- 在Dominik Penner公开此漏洞时,并没有告诉KDE社区此漏洞,直接将该0day的攻击详情披露在了Twitter上。公布之后,KDE社区的人员与Penner之间发生了很多有意思的事情,在这里不做描述。
影响版本
- 内置或后期安装有KDE Frameworks版本<=5.60.0的操作系统,如Kubuntu。
漏洞复现
环境搭建
- 虚拟机镜像:kubuntu-16.04.6-desktop-amd64.iso
- KDE Framework 5.18.0
- 搭建时,注意虚拟机关闭网络,否则语言包下载十分消耗时间;此外,安装完成后进入系统要关掉iso影响,否则无法进入系统。
复现过程及结果
PoC有多种形式,此处使用三种方式进行复现,第1、2种为验证性复现,第3种为接近真实情况下攻击者可能使用的攻击方式。
1.PoC1:
创建一个文件名为”payload.desktop”的文件:
在文件中写入payload:
保存后打开文件管理器,写入的payload被执行:
文件内容如下:
2.PoC2:
创建一个文件名为” .directory”的文件:
使用vi写入内容(此处有坑,KDE的vi输入backspace键会出现奇怪的反应,很不好用):
写入payload:
保存后打开文件管理器,payload被成功执行:
3.PoC3:
攻击者在本机启动NC监听:
攻击者将payload文件打包挂载至Web服务器中,诱导受害者下载:
受害者解压文件:
解压后,payload会被执行,攻击者接收到反连的Shell:
- 漏洞影响:虽然直接下载文件很容易引起受害者注意,但攻击者可以将恶意文件打包为压缩文件并使用社会工程学诱导受害者解开压缩包。不管受害者有没有打开解压后的文件,恶意代码都已经执行了,因为文件解压后KDE系统会调用桌面解析函数。此时受害者就容易中招。
漏洞原理简析
- 在Dominik Penner公布的细节中,对该漏洞已经有着比较详细的解释。在着手分析漏洞前,我们先学习一下Linux的desktop entry相关的知识。
desktop entry
- XDG 桌面配置项规范为应用程序和桌面环境的菜单整合提供了一个标准方法。只要桌面环境遵守菜单规范,应用程序图标就可以显示在系统菜单中。
- 每个桌面项必须包含 Type 和 Name,还可以选择定义自己在程序菜单中的显示方式。
- 也就是说,这是一种解析桌面项的图标、名称、类型等信息的规范。
- 使用这种规范的开发项目应该通过目录下的.directory或.desktop文件记录该目录下的解析配置。
详见: https://wiki.archlinux.org/index.php/Desktop_entries_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
漏洞的产生
KDE的桌面配置解析参考了XDG的方式,但是包含了KDE自己实现的功能;并且其实现与XDG官方定义的功能也有出入,正是此出入导致了漏洞。
在KDE文档中有如下的话( https://userbase.kde.org/KDE_System_Administration/Configuration_Files#Shell_Expansion ):
Shell ExpansionSo called Shell Expansion can be used to provide more dynamic default values. With shell expansion the value of a configuration key can be constructed from the value of an environment variable.To enable shell expansion for a configuration entry, the key must be followed by [$e]. Normally the expanded form is written into the users configuration file after first use. To prevent that, it is recommend to lock the configuration entry down by using [$ie].Example: Dynamic EntriesThe value for the "Email" entry is determined by filling in the values of the $USER and $HOST environment variables. When joe is logged in on joes_host this will result in a value equal to "joe@joes_host". The setting is not locked down.[Mail Settings]Email[$e]=${USER}@${HOST}
本文标题:KDE4/5命令执行漏洞(CVE-2019-14744)简析-创新互联
本文路径:http://pwwzsj.com/article/ccoiei.html