News:禁止使用本博客的技术文章、源码、工具等用于非法用途,否则后果自负。

WinRAR代码执行漏洞

jasonx 262 0 条

0x01 漏洞描述

111.jpg

近日Check Point团队爆出了一个关于WinRAR存在19年的漏洞,用它来可以获得受害者计算机的控制。攻击者只需利用此漏洞构造恶意的压缩文件,当受害者使用WinRAR解压该恶意文件时便会触发漏洞。

该漏洞是由于 WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,没有任何的基础保护机制(ASLR, DEP 等)。动态链接库的作用是处理 ACE 格式文件。而WinRAR解压ACE文件时,由于没有对文件名进行充分过滤,导致其可实现目录穿越,将恶意文件写入任意目录,甚至可以写入文件至开机启动项,导致代码执行。

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
下载WinACE并安装,安装完成后新建一个文本文件,名字任意。

1.png
然后利用WinACE进行压缩。

2.png

然后我们下载acefile.py 脚本。

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

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

3.png

根据漏洞的描述,问题是出现在filename中的。那主要就看下面的header吧。
用010Editor打开该文件。

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

5.png

如果要修改filename,则需要修改上面标注这几处。第一处为0x4e9a(hdrcrc),第二处为0x0044(hdrsize),第三处为0x0025(filename的长度),以及最后一处为filename。
修改顺序是由后到前。

这里修改filename为d:d:liehu.txt
长度为15,对应的hex为0x000f

6.png

然后修改hdr_size,长度为46,对应的hex为0x002E。

7.png

接下来就是修改hdr_crc了,这里有一个取巧的方法。
我们再次运行命令python acefile.py --headers liehu.ace
程序中断并提示CorruptedArchiveError: header CRC failed
定位到错误的位置

8.png

这里ace_crc16(buf)的值就是ace文件0x4e9a对应的值,直接打印出该值并将该位置的值修改即可。

9.png

对应的值为63232,转换为hex为0xF700。

10.png

最后文件内容为

11.png

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

12.png

右键解压该文件,则会在D盘生成一个liehu.txt文件。

13.png

测试文件:
https://fuping.site/files/liehu.ace

解压后会在D盘生成一个liehu.txt文件

0x04 修复建议

有两种方式

  1. 升级到最新版本,WinRAR 目前版本是 5.70 Beta 1
  2. 删除UNACEV2.dll文件

14.png

此时再次解压恶意文件会提示如下错误:

15.png

0x05 EXP

https://github.com/WyAtu/CVE-2018-20250

CVE-2018-20250-master.zip

0x06 参考

https://research.checkpoint.com/extracting-code-execution-from-winrar/

WINRAR漏洞 WINrar解压漏洞 Bandizip漏洞 好压漏洞 360压缩漏洞 CVE-2018-20250

与本文相关的文章

发表我的评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址