Jirairya

WinRAR代码执行漏洞复现


Check Point的网络安全研究人员发现一个潜伏19年的漏洞——WinRAR代码执行漏洞。受影响的版本不止Winrar5.7版本之前,Bandzip、2345压缩、好压、totalcmd等软件也受影响,受害者使用受影响的压缩软件解压构造的恶意文件时便会触发漏洞。

受影响的版本

影响版本:

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

腾讯研究员利用玄武实验室自研的“阿图因”系统,对已收录的全网 PC 软件进行了扫描,统计了 unacev2.dll 的使用情况,其版本分布情况如下图所示:

通过“阿图因”系统,腾讯研究员对使用了该共享库的软件进行反向溯源,目前扫描到了受影响的有 24 款国外软件,15 款国产软件。

多数受影响的软件都可以被归类为工具软件。其中至少有9款压缩软件,以及8款文件浏览器。还有其它许多软件将 unacev2.dll 作为 WinRAR 的一部分放在了自己的软件包中,作为解压模块使用。(使用unacev2.dll动态共享库的解压、文件管理类工具软件)

漏洞细节

漏洞主要是由Winrar用来解压ACE压缩包采用的动态链接库unacev2.dll这个dll引起的。unacev2.dll中处理filename时只校验了CRC,可以通过更改压缩包的CRC校验码来修改解压时候的filename来触发这个Path Traversal漏洞。但是Winrar本身检测了filename,有一些限制并且普通用户解压RAR文件时候不能将恶意的Payload解压到需要System权限的文件夹。当用户将文件下载到默认的C:\Users\Administrator\Downloads目录下时,通过构造

C:\C:C:../AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\test.exe 

经过Winrar的CleanPath函数处理会变成

C:../AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\test.exe

其中C:会被转换成当前路径,如果用Winrar打开那么当前路径就是C:\Program Files\WinRAR,要是在文件夹中右键解压到xxx\那么当前路径就是压缩包所在的路径。

当用户在文件夹中直接右键解压到xx,那么恶意的payload解压地址就会变成

C:\Users\Administrator\Downloads../AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\test.exe

就是当前用户的启动项。这样一个利用完成了从一个Path Traversal到任意命令执行的过程。

漏洞复现

环境

  • win7 x64
  • winace v2.69
  • winrar 5.6.1 x64
  • 010Editor

复现

0x01 新建文件b404.txt

0x02 使用winace进行压缩,将b404.txt压缩为b404.ace

0x03 下载https://github.com/droe/acefile 中的ace脚本读取文件头信息:

python acefile.py --headers b404.ace

0x04 更改b404.ace的解压缩路径

第一处为0x590F(hdrcrc),第二处为0x003A(hdrsize),第三处为0x001B(filename的长度),以及最后一处为filename。

  • 0x3A的十进制是58
  • 0x1B的十进制是27

修改文件名为C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\b404.txt,文件名长度为69,即十六进制0x0045。在之前的0x001B上修改为0x0045:

0x05 修改hdr_size

因文件的绝对路径更改(即文件名变化),hdr_size发生变化,为100,十六进制为64h

原hdr_size为0x003A,因文件的绝对路径更改(即文件名变化),就更改hdrsize的长度0x003A0x0064:

0x06 修改CRC

现在直接运行acefile脚本检测修改后的ace文件,报错:

参考文章使用的是脚本报错中断时进行下断点,找出正确的CRC值。我直接使用https://github.com/WyAtu/CVE-2018-20250 中的acefile脚本进行正确的hdr_crc值查找,并更改:

更改成功之后,使用https://github.com/droe/acefile 中的acefile就可以检验成功:

然后使用WinRAR解压:

解压出来的路径是C:\Users\b404\Desktop\b404\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,根本不符合C:\Users\b404\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup的目标地址,也就是目录穿越失败。即构造的文件名C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\b404.txt需要修改

0x07 重新构造文件名

重新构造文件名为C:\C:C:../AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\b404.txt,将其写入到b404.ace中。

使用ace脚本检测ace头信息,得到正确的hdr_crc

此时需要修改的值为:

  • hdr_size:0x006F(即6Fh,十进制为111)
  • filename_size:0x0050(即50h,十进制为80)
  • right_hdr_crc:0x0EFA

在运行中shell:startup打开自启动目录C:\Users\b404\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,没有b404.txt

解压到当前文件夹(解压到b404\也可以实现目录穿越):

C:\Users\b404\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup目录中就出现b404.txt

成功目录穿越。

扩展

若将b404.txt换成victim.exe,里面添加一些具有迷惑性的文档,ace扩展名更改为rar(WinRAR是通过文件的内容而不是扩展来检测格式的),一旦解压该程序,那就可以做很多事了。

研究人员还发现一个SMB攻击向量,可以连接到任意的IP地址,并在SMB服务器的任意路径创建文件和文件夹。比如:

C:\\\10.10.10.10\smb_folder_name\some_folder\some_file.ext => \\10.10.10.10\smb_folder_name\some_folder\some_file.ext

在拥有system权限下可以放入 c:/windows/system32/wbem/mof/nullevt.mof,直接获取目标主机的权限。

可以投放恶意dll文件进行dll劫持获取到目标主机的权限,或者覆盖用户主机上的文件等方式获取目标主机的权限

修补

  1. 升级到最新版本。比如WinRAR升级到5.70 Beta 1(http://win-rar.com/fileadmin/winrar-versions/winrar-x64-57b1.exe)
  2. 删除UNACEV2.dll文件

Refer

  • https://research.checkpoint.com/extracting-code-execution-from-winrar/
  • https://xlab.tencent.com/cn/2019/02/22/investigating-winrar-code-execution-vulnerability-cve-2018-20250-at-internet-scale/
  • https://fx.weico.net/share/59661516.html?weibo_id=4342204665047502
  • https://mp.weixin.qq.com/s/G7UQe_5yoCJhCEgIRmRU5g
  • https://github.com/WyAtu/CVE-2018-20250
  • https://www.cnblogs.com/backlion/p/10417985.html

Similar Posts

Comments