WinRAR 远程代码执行漏洞复现
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来实现目录穿越漏洞,可以将文件解压到任意目录中。
主要所需工具WinACE
、010Editor
。
3.1下载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。
修改顺序是由后到前。
这里修改filename
为g:\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 缓解措施
- 升级WinRAR到5.70beta1
- 删除解压软件下的
UNACEV2.DLL
0x05 用到的文件
Github:https://github.com/NS-Sp4ce/BlogFiles/tree/master/CVE-2018-20250