Mac Zoom客户端中存在漏洞,允许任何恶意网站在未经许可的情况下启用摄像头。这一漏洞可能会暴露出世界上多达75万家使用ZOOM进行日常业务的公司。
CVE编号
DOS漏洞:在客户端版本4.4.2-CVE-2019–13449中修复
信息泄露(网络摄像头):未补-CVE-2019–13450
更新-7月9日(下午)ZOOM表示他们将在今晚发布修复程序,移除隐藏的Web服务器;希望这能修补这个漏洞。ZOOM首席执行官还保证,他们将更新其应用程序进一步保护用户隐私。
前言
此漏洞允许任何网站在未经用户许可的情况下,在摄像机在线的情况下强制加入zoom call。除此之外,此漏洞还允许任何网页通过反复将用户加入无效呼叫来拒绝服务。
此外,如果您安装了zoom客户端,然后将其卸载,您的计算机上仍然有一个本地主机Web服务器,它将重新安装zoom客户端,除了访问网页外,不需要任何用户进行交互。这个重新安装的“功能”至今仍然有效。
此漏洞利用了很简单的zoom功能,可以向任何人发送会议链接(例如https://zoom.us/j/492468757)当他们在浏览器中打开该链接时,他们的zoom客户端会在本地计算机上打开。但是这一惊人的功能是如何实现的,以及它是如何安全地实现的。后来发现,它确实没有得到安全的实施。不需要额外的用户交互来保证安全。
该漏洞最初是在2019年3月26日披露的。这个最初的报告包括对“快速修复”zoom的建议,可以通过简单地更改服务器逻辑来实现。ZOOM用了10天来确认漏洞。在2019年6月11日第一次关于如何修补漏洞的实际会议,仅在90天公开披露截止日期前18天。在这次会议中,确认了漏洞的细节,并讨论了ZOOM的计划解决方案。然而,很容易在修补计划中发现新的漏洞利用方法。此时,zoom只剩下18天的时间来解决漏洞。在等待了90天之后的6月24日,也就是公开披露截止日期前的最后一天,ZOOM只实现了最初建议的“快速修复”解决方案。
最终,ZOOM未能快速确认所报告的漏洞,未能及时修复。未能保护如此庞大用户群免受攻击。
细节
在Mac上,如果您安装了ZOOM,那么本地计算机上就有一个运行在端口19421上的Web服务器。您可以通过在终端中运行'lsof-i:19421'来确认此服务器是否存在。首先,在本地机器上安装一个运行Web服务器的应用程序和一个完全没有文档的API是很危险的。其次,访问的任何网站都可以与运行在本地的Web服务器进行交互也是很危险的。当我得知这个Web服务器存在时,最初的想法是,如果在这个Web服务器的参数处理中有一个缓冲区溢出,那么就可以在我的机器上实现RCE。我还发现,这个页面不是发出常规的Ajax请求,而是从本地运行的Web服务器加载图像。图像的不同维度指示服务器的错误/状态代码。您可以在这里看到案例切换逻辑。
可怕的是,Web服务器可以做的远不止启动一个zoom会议。如果用户卸载了zoom应用程序,这个Web服务器也可以重新安装。我的问题是,为什么这个Web服务器返回的数据是以图像文件维度编码的?其原因应该是为了绕过跨源代码资源共享(cors)。但是浏览器显式地忽略本地主机上运行的服务器的任何CORS策略。
Chrome does not support localhost for CORS requests (an open bug since 2010 文章链接:https://stackoverflow.com/questions/10883211/deadly-cors-when-http-localhost-is-the-origin
视频通话漏洞
用另一个帐户创建了一个个人会议,接获数据包并对数据包进行解析后删除参数,查看启动zoom会议所需的最小GET请求。有很多随机参数被发送到本地主机Web服务器,但唯一重要的是下面的参数。
代码语言:javascript复制action=join
confno=[whatever the conference number is]
获取请求可使我的计算机加入另一个帐户创建的zoom会议。
以上操作成功后,我在想是否可以通过传递参数执行其他共呢个。但在搜索了各种公共文档和公共Protobuff后,找不到任何关于隐藏功能可能存在的介绍说明。这个Web服务器的API完全没有文档记录,在官方和非官方文档中搜索不到关于这个桌面Web服务器的任何信息。
所以现在我有了一个最简单的POC,可以用它恶意地让任何用户拨打电话,因为“新会议”的默认设置是允许用户选择是否加入他们的音频/视频。我认为这只是一个安全漏洞。直到今天仍然可以使用此漏洞在未经允许的情况下启动呼叫。我查阅了六个月前zoom修补的RCE漏洞,该漏洞结合现在的这个漏洞可以再任何安装zoom客户端的mac电脑上远程执行代码。如果一个相似特征的漏洞出现就会导致攻击者利用任意网站再mac上执行代码。任何使用zoom版本在4.1.33259.0925或者更低的版本都会收到攻击。
到目前为止,我只能在没有用户许可的情况下让他们加入视频会议。但是如何利用该漏洞激活摄像头。
打开参与者模式进行会议时,我发现加入会议的任何人都会自动连接视频。在我自己的机器上尝试了同样的功能,发现它的工作原理完全相同。这促使我在下面创建概念证明。
概念证明
本地客户机zoom Web服务器作为后台进程运行,因此,为了利用这一点,用户甚至不需要“运行”(在传统意义上)zoom应用程序就会受到攻击。
一个网站需要做的就是将上述内容嵌入到他们的网站中,任何zoom用户都会立即与他们运行的视频连接起来。可以是嵌入恶意广告,也可用作网络钓鱼活动的一部分。
可以在下面链接的POC进行漏洞测试。警告:在Mac上单击此链接将使您进入zoom call!https://jlleitschuh.org/zoomvulnerabilitypoc/可以在下面的连接找到一个完全工作的POC,它将在您的摄像机处于活动状态时启动您的通话。警告:在Mac上单击此链接将使您在相机激活的情况下进入zoom call!
快速修复
为了修复该漏洞的“自动加入视频”部分,建议在其后端服务器上进行校验,服务器端会立即禁用会议创建者默认情况下自动启用参与者视频功能。同时如果有其他隐藏的功能也应该被禁用。
对此建议,我收到以下回复:ZOOM官方相信能够让我们的客户选择他们想要的zoom方式。这包括他们是否希望在自动启用麦克风和视频的情况下加入会议,或者在加入会议后手动启用这些输入设备。在zoom会议客户端音频和视频设置中可以使用这些配置选项。但是,我们也认识到一些客户希望在加入会议之前进行确认对话。根据您的建议和来自其他客户的功能请求,Zoomteam[sic]正在评估此类功能,以及在对用户输入设备修改时的权限控制。我们一定会通知你我们的改进计划。
需要注意的是,zoom默认配置是允许主机选择在默认情况下相机是否启用。ZOOM最终修复了这个漏洞,但只是阻止攻击者打开用户的摄像机。他们没有禁用攻击者强行使访问恶意网站的人进入zoom视频会议的功能。
更新:2019年7月7日:zoom在新的更新修复中允许摄像机在激活的状态中利用此漏洞。
拒绝服务(DOS)漏洞
同样的漏洞也允许攻击者对任何用户的计算机执行DoS操作。只要发送一个错误数字的重复GET请求,ZOOM应用程序就会不断地从操作系统请求“对焦”,POC如下:
代码语言:javascript复制<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.onload = function() {
// Be tidy, clean up the DOM afterwards
image.parentNode.removeChild(image);
};
document.body.appendChild(image);
}, 1);
</script>
</body>
在4.4.2版的zoom客户端中修补了此DOS漏洞。
安装漏洞
如果在计算机上安装了zoom,则会安装Web服务器。如果从计算机上卸载zoom,它会继续运行。除了启动视频功能外,此服务器还支持更新和安装新版本的zoom。
此Web服务器内的一个API在所有安装了zoom的Mac上运行,该api允许此服务器更新或重新安装当前安装的zoom版本。您可以通过执行以下操作来确认此逻辑确实存在:
如果尚未安装zoom客户端,请在计算机上安装它。 打开缩放客户端,然后关闭它。 将applications/zoom.us.app文件删除,从计算机中卸载zoom客户端。 打开任何zoom链接,zoom将重新安装到客户端应用程序文件夹中,并该Web服务器启动。
对源代码中列出的所有域进行whois查找。例如,域名zoomgov.com于2019年5月1日到期。如果此域注册失效,接管此域将允许攻击者从该站点托管受感染的ZOOM安装程序版本,以及已经卸载ZOOM的受感染的用户。这将使该漏洞成为远程代码执行(RCE)漏洞。我在2019年4月26日与Mozilla安全团队通话时向ZOOM团队说明了这一点。在通话结束后的5小时后,该域名已注册到2024年5月1日。
基本安全漏洞
在我看来,网站不应该和桌面应用程序交互。浏览器应该强制其在沙箱执行,以防止其在用户计算机上执行恶意代码。
CORS-RFC1918
在与Chromium和Mozilla Firefox安全团队讨论此漏洞时,他们都表示他们无法对此漏洞采取任何措施。Chromium团队向我指出CORS-RFC1918要求浏览器供应商在允许站点对本地资源(如localhost和192.168.1.*地址空间)发出请求之前查询用户的权限。
Google的Project Zero的Tavis Ormandy在TrendMicro的密码管理器中发现了类似的漏洞,允许通过浏览器远程执行代码并从密码保险库中泄露用户的密码。
当向Mozilla Firefox团队报告此相同漏洞时,他们并没有重视,因为它不是针对Firefox的漏洞。但是,官方很快意识到该漏洞的危害。在2019年4月26日我被邀请与Zoom和Mozilla Firefox团队联系讨论该漏洞。在这次电话会议中,他们向Mozilla和我承诺,这个漏洞将在90天内得到修补。
总结
截至2015年,Zoom拥有超过4000万用户。Mac占PC市场的10%,而且自2015年以来Zoom显著增长,可以假设至少有400万的Zoom用户使用Mac。Zoom,Google Meet或Skype for Business等工具。
具有此众多用户的应用程序中的任何漏洞都必须被视为对用户的严重威胁。本报告中描述的所有漏洞都可以通过 “drive-by attack”方法进行利用。在我与Zoom安全团队的对话中,他们似乎多次争辩说这个漏洞的严重性是有限的,因为它需要“用户交互”才能利用这些漏洞。
我相信,为了完全保护用户需要删除这个localhost Web服务器解。使用浏览器注册自定义URI处理程序(例如,zoom:// URI处理程序)等替代方法。触发URI处理程序后,浏览器会明确提示用户确认打开应用程序。根据Zoom团队的说法,localhost服务器存在的原因是Apple的Safari不支持URI处理程序。
*参考来源:medium,Kriston编译整理,转载请注明来自 FreeBuf.COM