影响400多万Mac系统的Zoom视频会议软件漏洞是怎样的

本篇文章为大家展示了影响400多万Mac系统的Zoom视频会议软件漏洞是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

作者发现了视频会议软件ZOOM for Mac客户端程序的两个漏洞和一个缺陷,安装有ZOOM客户端的Mac系统用户可能会受到RCE攻击,可被攻击者远程未授权开启本机摄像头。

Zoom是一款多人云视频会议软件,为用户提供兼备高清视频会议与移动网络会议功能的免费云视频通话服务。用户可通过手机、平板电脑、PC与工作伙伴进行多人视频及语音通话、屏幕分享、会议预约管理等商务沟通。Zoom支持100人以下的高清视频通话,是目前领先的移动视频会议工具。Zoom适用于Windows、Mac、Linux、iOS、Android系统。

漏洞原因在于ZOOM for Mac系统的客户端软件中存在bug缺陷,攻击者通过在自己网站中部署利用代码,当安装有ZOOM for Mac的系统用户访问该网站后,就能触发漏洞,实现未授权的摄像头开启。该漏洞可能会对采用Zoom软件应用于日常视频会议的全球75万家公司造成影响。

CVE漏洞编号

CVE-2019–13450:开启受害者系统摄像头导致的信息泄露漏洞(未修复)

CVE-2019–13449:DoS拒绝服务攻击 (在ZOOM 4.4.2客户端版本中已经修复)

漏洞介绍

该漏洞可以通过访问一个恶意网站的方式,远程未授权地激活开启受害者系统中与ZOOM关联的摄像头,并强制ZOOM客户端用户加入某个ZOOM视频会议。

这种情况下,可让受害者反复不停地加入一个无效的视频会议,致使其安装有ZOOM客户端形成拒绝服务攻击(DoS)。此外,如果用户在系统中安装了ZOOM客户端软件之后又卸载了它,但是,它仍然在你的系统中残存有一个localhost的Web服务,通过该残存服务,ZOOM可以不用任何用户交互操作即能实现完整的程序重装,目前,这个所谓的“重装”功能依然有效。

在Mac系统中,如果你安装了ZOOM客户端软件,它会形成一个本地localhost:19421的Web服务,你可以在终端中用命令 lsof -i :19421来查看。

首先,这种安装了ZOOM客户端软件,就开启一个无任何文档说明的API接口的事至少让我觉得不妥;其次,我访问的任何网站都可能会与该localhost Web服务发生交互,这对搞安全的我来说,简单就是一个风险隐患。以下是ZOOM源码中开启locaohost服务的代码段:

影响400多万Mac系统的Zoom视频会议软件漏洞是怎样的看到代码的时候我就想,是否其参数处理过程会存在缓冲区溢出漏洞,这样就会让操作系统面临RCE攻击。当然,此仅当猜测,最终也没发现这样的问题。当访问一个视频会议加入(Join)链接之后,可通过Chrome浏览器调试工具对该locaohost服务的行为进行观察,如下:

影响400多万Mac系统的Zoom视频会议软件漏洞是怎样的后来我还发现,该locaohost服务对应的页面并不执行正常的AJAX请求,但它会从本机运行的localhost web服务中加载一张图片,这张加载图片的不同尺寸都对应着表示ZOOM服务的不同状态和错误码,如下:

影响400多万Mac系统的Zoom视频会议软件漏洞是怎样的可怕的是,从以上这个状态和错误码推断来看(download、install、upgrade、launch...),这个本机的localhost web服务具备的功能,不仅仅是能启动ZOOM视频会议,也就是前述提到的,如果用户卸载了ZOOM,它还能执行重装......,等等。

我的疑问是,为什么这个localhost web服务会返回这种以图片尺寸为状态响应的编码数据?唯一的理由是,它是为了绕过CORS策略限制。但是,针对本机localhost的CORS策略,浏览器已经完全不做限制了啊。比如,Chrome自2010年起,就已经不对localhost的CORS请求进行限制了。我猜想ZOOM此举是出于安全考虑,也貌似可能是滥用这种技巧去绕过CORS策略。在此,我对开启受害者系统摄像头的CVE-2019–13450、导致DoS拒绝服务的CVE-2019–13449以及卸载后残存的重装bug进行一个简要分析。

激活受害者系统的摄像头漏洞

我用不同账号在本机创建了一个ZOOM私人会议,并用Postman对其进行请求分析和参数测试,看看启动一个会议所需的最小GET请求是些什么。分析中有大量随机参数发向localhost web服务,其中有两个重要参数如下:

action=join (执行操作-加入)

confno=[whatever the conference number is] (会议编号)

操纵这两个参数,从Postman中构造以下GET请求,我就能让我的电脑加入其它用户创建的ZOOM视频会议了。

之后,我又修改了其它参数看能否实现其它行为,但从ZOOM公开的说明文档和ProtoBuff机制来看,我找不到任何可利用的隐藏功能,而且,这个本机的web服务没有任何官方说明,难以理解。以上的GET请求只能作为一个小小的验证性POC,用它可诱使受害者强制用户加入会议,新加入会议后, “New Meeting”的默认设置是会让用户选择音频/视频加入,我认为这本身就是一个安全漏洞。

之后,我注意到Tenable上报过ZOOM的一个RCE漏洞(CVE-2018-15715),它在去年底才被完整修复,但如果CVE-2018-15715和我发现的这个漏洞结合的话,可能会对安装有ZOOM客户端的任何Mac系统形成RCE攻击影响。而就我当前的发现来说,我暂时还没真正的exploit利用代码,如何让受害者系统的摄像头激活开启是一个难点。但当我设置办公视频会议时,看到了ZOOM中的以下这个界面,也就是说,在设置会议的时候,可选择让参会者开启摄像头加入会议:

影响400多万Mac系统的Zoom视频会议软件漏洞是怎样的选择Video项下的 “Participants: On”按钮,其它参会人员将会自动开启其本机摄像头,以视频形式加入会议。这样一来,我就可以继续再构造新的POC了。

POC

由于本机的localhost web服务在后台运行,所以实际来说,要使受害者中招,根本不需要以传统方式真实运行目标应用。第一行POC代码强制受害者加入会议:

如果要使加入会议的受害者自动开启摄像头,可把以下视频邀请链接嵌入到由攻击者控制的恶意网站iframe中就行,第二行POC代码: