WinRAR系列任意代码执行漏洞(CVE-2018-20250、CVE-2018-20251、CVE-2018-20252与CVE-2018-20253)复现

0x00 背景

WinRAR 作为最流行的解压缩软件,支持多种压缩格式的压缩和解压缩功能。今天,Check Point公司的安全研究员 Nadav Grossman 公开了他在 WinRAR 中发现的一系列漏洞。其中以 ACE 解压缩模块的远程代码执行漏洞(CVE-2018-20250)最具危害力。
WinRAR 为支持 ACE 压缩文件的解压缩功能,集成了一个具有 19 年历史的动态共享库 unacev2.dll。 而此共享库自 2006 年以来再未更新过,也未开启任何漏洞利用缓解技术。Nadav Grossman 在 unacev2.dll 中发现了一个目录穿越漏洞,成功利用此漏洞可导致远程代码执行或 NTLM hash 泄露。

0x02 漏洞影响

影响版本:

WinRAR < 5.70 Beta 1
Bandizip < = 6.2.0.0
好压(2345压缩) < = 5.9.8.10907
360压缩 < = 4.0.0.1170

0x03 复现

该漏洞的实现过程:首先新建一个任意文件,然后利用WinACE进行压缩,修改filename来实现目录穿越漏洞,可以将文件解压到任意目录中。

主要所需工具WinACE010Editor

3.1下载WinACE并安装,安装完成后新建一个文本文件,名字任意。

安装WinACE
安装WinACE
新建文本文件
新建文本文件
然后利用WinACE进行压缩。
WinACE进行压缩
然后我们下载acefile.py 脚本。

下载地址为:
https://github.com/droe/acefile/blob/master/acefile.py

使用命令python acefile.py --headers testfile.ace来读取该文件头信息。

读取该文件头信息

根据漏洞的描述,问题是出现在filename中的。那主要就看下面的header吧。

010editor打开该文件。

需要看选中的部分。
对比acefile解析的结果,并明白各个段对应的内容。

如果要修改filename,则需要修改上面标注这几处。第一处为0x20EE(hdrcrc),第二处为0x002B(hdrsize),第三处为0x000C(filename的长度),以及最后一处为filename。

修改顺序是由后到前。

这里修改filenameg:\g:\testsp4ce.txt图中D盘因开启了防护软件被拦截了,下文中的d都为g盘

长度为19,对应的hex为0x0013

然后修改hdr_size,长度为50,对应的hex为0x0032

接下来就是修改hdr_crc了,这里有一个取巧的方法。

我们再次运行命令python acefile.py --headers testfile.ace

程序中断并提示CorruptedArchiveError: header CRC failed和正确的CRC

最后改完如下

再次查看,可以正常解析,并看到filename已经修改成功

右键解压到testfile\

即可在g盘看到解压出的testsp4ce.txt

后记

经测试,winrar 5.4在解压恶意压缩包时,压缩包在任意目录均可解压触发,且右键的2个解压选项均可触发

0x04 缓解措施

  1. 升级WinRAR到5.70beta1
  2. 删除解压软件下的UNACEV2.DLL

0x05 用到的文件

Github:https://github.com/NS-Sp4ce/BlogFiles/tree/master/CVE-2018-20250