CVE-2020-6110 Zoom RCE

  • A+

漏洞概述

近日,Cisco Talos安全研究人员在Zoom客户端中发现了1个部分路径遍历漏洞,利用该漏洞可以实现远程代码执行。漏洞CVE编号为CVE-2020-6110,CVSS 3.0评分8.0分,研究人员测试发现影响Zoom Client Application 4.6.10和4.6.11版本。Zoom已经在上个月发布的4.6.12版本中修复了该漏洞。

漏洞分析

漏洞产生的原因是Zoom应用处理通过聊天分享的代码段的方式上存在缺陷。Zoom 的聊天功能是基于XMPP 标准和一些其他的扩展以支持更好的用户体验。其中的一个扩展特征就是支持发送源代码段。要发送源代码需要安装一个额外的插件,但是接收代码时并不需要安装插件。

实质上,代码段的分享是通过生成一个特殊的zip文件,该zip文件中含有多个支持文件,包括:
- Untitled.html
- Untitled.properties
- Untitled.rtf
- Untitled.tx*

最后一个文件中含有源文件,rtf文件中含有代码语法高亮显示,特征文件描述该包。

当用户与他人分享代码段时,就会创建一个zip文件,并通过到file.zoom.us/zoomfile/upload 请求上传到zoom的存储服务器。反过来,zoom客户端会获取文件object ID ,并发送XMPP消息到目标接收者。XMPP消息如下所示:
<message from="[email protected]/ZoomChat_pc" to="[email protected]" id="{170029-35B3-4748-9CB0-42E42FF20DE5}" type="chat">
<thread>gloox{THREADID}</thread>
<active xmlns="http://jabber.org/protocol/chatstates"/>
<sns>
<format>%[email protected] sent you a code snippet</format>
<args>
<arg>S E</arg>
</args>
</sns>
<zmext expire_t="1650165620000" t="1587093620200">
<obj k="key" id="__object_id" s="166" nm="Untitled1.zip" f="14" st="0"/>
<from n="S E" e="emailaddress" res="ZoomChat_pc"/>
<to/>
<visible>true</visible>
<msg_feature>1024</msg_feature>
</zmext>
<body>S E has sent you a code snippet</body>
</message>

object ID属性可以识别含有代码段描述的文件。当XMPP客户端接收到上述消息时,就会继续从ZOOM的数据存储中取回特定的文件,并保存在本地。在Windows客户端上,这些文件保存在%APPDATA%RoamingZoomdataxmpp_userCodeSnippet<random uid dir> 。与其他通过zoom文件分享的是相同的。但对代码段来说,zoom会自动解压下载的zip文件来预览和展示内容。漏洞的核心是zoom的zip文件提取特征在提取内容之前没有对zip文件的内容进行有效性验证。

因此,攻击者就可以在无需交互的情况下通过自动提取zip文件来在目标计算机上植入二进制文件。此外,部分路径遍历问题允许精心伪造的zip文件来在随机生成的目录外写文件。比如,zip中的文件路径如果是..testanothertest.exe,就可以提取到%APPDATA%RoamingZoomdataxmpp_userCodeSnippettestanothertext.exe,而非随机UID的目录。这可以被利用来发起另外一个攻击。

此外,Zoom处理分享的文件的方式也会该漏洞可以被再次利用。当通过zoom客户端来分享普通文件时,需要点击该文件并选择目标地才可以访问。因为Zoom客户端会追踪下载的文件,因此融合上面提到的问题就可以实现将任意文件写入任意路径。

在该场景中,攻击者首先分享一个恶意zip文件,比如interesting_image.jpeg。用户并不会通过zip或jpeg直接打开文件,而ZOOM会记录该文件被保存的特定的路径。然后,攻击者发送一个代码段分享消息该目标受害者,并且在obj tag中指定相同的文件id和细节。ZOOM客户端应用会看到该文件已经下载了,并继续解压,而不会考虑jpeg扩展的问题。通过滥用该部分路径遍历漏洞,恶意zip文件可以提取文件到cUsers<username>和其他任意子目录中。

在该场景中,攻击者会上传一个名为interesting_image.jpeg的文件到file.zoom.usserver上,然后攻击者发送一个消息如下:
<message from="[email protected]/ZoomChat_pc" to="[email protected]" id="{170029-35B3-4748-9CB0-42E42FF20DE5}" type="chat">
<thread>gloox{THREADID}</thread>
<active xmlns="http://jabber.org/protocol/chatstates"/>
<sns>
<format>%[email protected] sent you a file</format>
<args>
<arg>S E</arg>
</args>
</sns>
<zmext expire_t="1650165620000" t="1587093620200">
<obj k="key" id="__object_id_of_interesting_image.jpeg" s="166" nm="interesting_image.jpeg" f="5" st="0"/>
<from n="S E" e="emailaddress" res="ZoomChat_pc"/>
<to/>
<visible>true</visible>
<msg_feature>8</msg_feature>
</zmext>
<body>S E has sent you a code snippet</body>
</message>

客户端会保存该文件,然后攻击者发送内容如下的消息:
```

gloox{THREADID}

%[email protected] sent you a file

S E

true
1024

S E has sent you a code snippet

```

上面两个消息的区别在于obj tagf属性。值14表明代码段特征。msg_feature特征也被修改为1024,obj tag中的file IDname都没有变化,这使得zoom客户端不会重新下载文件到CodeSnippets目录,而是选择使用之前保存的路径。

即使目标用户删除了保存的文件,Zoom客户端会重新下载但仍然会使用之前保存文件的路径。因此,恶意zip文件就可以包含多个含有目录遍历路径的恶意文件副本,用来提供目标用户保存文件的位置。

总的来说,该漏洞可以被用于以上2个场景中。首先,无需用户交互就可以将任意二进制文件植入到目标系统中。第二,通过用户交互,可以将二进制文件植入到任意路径并可能覆盖(写)一些重要的文件,导致任意代码执行。

更多漏洞细节参见:https://talosintelligence.com/vulnerability_reports/TALOS-2020-1056

相关推荐: Java反序列化回显解决方案

题外话    这是一篇本应该早就完成的文章,但是由于各种原因拖延至此。之前有读者就催我,但是实在是各种事情缠身,加上自己颓废了一段时间导致现在才公布。之后可能会断更一段时间关于代码审计方面文章,时间暂不确定。其实有几个题材早也确定,但是实在…