通过LibreOffice在BigBlueButton和JODConverter中实现文件外泄
BigBlueButton是一款免费的基于网络的视频会议软件,最近因新冠疫情而变得相当流行。今年早些时候,我对其安全性进行了简要检查,并在Golem.de(德语)上发表了一篇文章。我想在这里分享最重要的发现。
BigBlueButton有一个功能,允许演示者上传各种文件格式的演示文稿,然后在网络应用程序中显示。这看起来像是一个巨大的攻击面。许多文件格式的转换是在服务器上使用LibreOffice完成的。在寻找利用服务器端LibreOffice渲染的方法时,我发现了Bret Buerhaus的一篇博客文章,讨论了利用此类设置的多种方法。
其中描述的一种方法是Opendocument Text(ODT)文件中的一个功能,允许在文本部分嵌入来自外部URL的文件。这可以是像https这样的web URL或文件URL,并包括本地文件。
这在BigBlueButton中直接有效。引用本地文件的ODT文件将显示该本地文件。这允许显示运行BigBlueButton服务的用户在服务器上可以访问的任何文件。一种可能的利用方式是外泄包含API密钥的配置文件,然后基本上可以控制BigBlueButton实例。我在这里有一个展示该漏洞的视频。(我稍后将发布该漏洞利用。)
我在5月份向BigBlueButton的开发人员报告了这个问题。不幸的是,我对他们的安全流程的体验不是很好。起初我根本没有得到回复。在另一封邮件之后,他们告诉我他们计划通过chroot或docker容器来沙盒化LibreOffice进程。然而,这至今仍未发生。它计划在即将发布的2.3版本中实现,并且独立于这个漏洞,这是一个好主意,因为LibreOffice只是创建了很多攻击面。
最近我进一步研究了这个问题。包含外部文件的功能只有在用户手动确认后才会发生,并且如果用户在命令行上使用LibreOffice,默认情况下根本不起作用。所以理论上这个漏洞不应该有效,但它确实有效。
结果发现,原因是BigBlueButton使用的另一个软件叫做JODConverter。它提供了对LibreOffice转换功能的包装。在联系了LibreOffice安全团队和JODConverter的开发人员之后,我们发现它默认启用了包含外部URL的功能。
我将这些信息转发给了BigBlueButton的开发人员,并最终导致了一个修复,他们现在手动更改了JODConverter的默认设置。JODConverter的开发人员也考虑更改默认设置,但这尚未发生。因此,其他使用JODConverter进行服务器端文件转换的软件或网页可能仍然容易受到攻击。
该修复包含在版本2.2.27中。今天我了解到,RedTeam Pentesting公司后来独立发现了相同的漏洞。他们还请求了一个CVE:现在已归档为CVE-2020-25820。
虽然这个问题已经修复,但BigBlueButton对安全问题的处理并不出色。从我的初始报告到修复花了大约五个月的时间。发布说明没有提到这是一个重要的安全更新(更改的注释是“加速转换”)。
我在BigBlueButton中发现了一堆其他安全问题,并提出了一些加固更改。这需要大量的来回沟通,但所有重要的问题现在都已解决。
演示文稿上传的另一个问题是它允许跨站脚本,因为它没有为下载设置正确的内容类型。这是由另一个人独立发现的,并在不久前修复。(如果你对这类漏洞的细节感兴趣:我在去年的Security Fest上做了一个关于它的演讲。)
BigBlueButton本身及其默认Web前端Greenlight的会话Cookie都没有设置安全标志,因此Cookie可以通过网络以明文传输。现在这也已经更改。
默认情况下,BigBlueButton安装脚本启动了几个服务,这些服务打开了不需要公开访问的端口。现在这也已经更改。本地运行的freeswitch服务安装了默认密码(“ClueCon”),现在安装脚本也将其更改为随机密码。
看起来相当有问题的是使用过时的软件。BigBlueButton只能在Ubuntu 16.04上运行,这是一个长期支持版本,因此它仍然接收更新。但它也使用几个外部存储库,包括一个安装NodeJS版本8的存储库,并显示警告说该存储库不再接收安全更新。错误跟踪器中有一个开放的bug。
如果你正在使用BigBlueButton,我强烈建议你至少更新到版本2.2.27。这应该修复我发现的所有问题。我希望BigBlueButton的开发人员改进他们的安全流程,更及时地响应外部报告,并在问题修复时更加透明。
图片来源:Wikimedia Commons / NOAA / Public Domain
更新:概念验证已发布。