上周,Joomla! 项目发布了 Joomla! 3.7.4,该版本包含 2 个安全修复,其中一个被评为“高严重性”问题,与 CMS 的安装程序应用程序相关。在安全中心发布的初始公告中,没有透露有关实际攻击向量的更多细节 - 但由于初始报告者 Hanno Böck 在 Def Con 大会上的一次演讲中披露了该向量,我想从安全团队的角度分享一些见解。
过去的美好时光
到目前为止,安装像 Joomla! 这样的基于 Web 的应用程序一直是一个或多或少简单的过程:将文件上传到您的 Web 服务器,通过调用正确的 URL 在浏览器中启动安装程序应用程序,输入您的数据库凭据和其他配置详细信息,您就可以开始了。在此过程中,无需对该 Web 服务器进行“所有权证明”,无需进行身份验证 - 到目前为止,这是完全可以接受的,因为任何攻击者都需要两条关键信息
- 攻击者需要知道应用程序何时完全上传但尚未安装 - 通常,应用程序不会处于这种状态超过几分钟,这使得它更加困难
- 攻击者需要知道 Web 应用程序的准确位置(URL)才能运行安装程序
如果攻击者能够获得这两条信息,利用漏洞就相当容易了
- 使用您控制的外部数据库运行安装程序,因为您无法在受害者的 Web 服务器上暴力破解有效的数据库凭据
- 使用已安装的应用程序上传后门(对于 Joomla!,这可以通过在后端上传恶意扩展包轻松完成)
- 使用您的后门重置应用程序(例如,通过删除 configuration.php 并还原 Joomla 的安装文件夹),让受害者认为没有发生任何不良事件。
这些步骤如果由脚本自动化,可以在不到一分钟内完成 - 但是,这只是一个纯粹的理论问题,因为攻击者根本无法获得关键信息(何时何地)。正因为如此,几乎没有主要的 Web 应用程序实现了验证过程,到目前为止,这是完全可以接受的。
地平线上的乌云
不幸的是,一种用于提高 Web 安全性的新协议改变了这种现状,因为它成为新的信息来源。该协议称为证书透明度 (CT),它是证书颁发机构 (CA) 颁发的所有 SSL 证书的实时日志。该协议背后的基本理念是检测rogue SSL 证书的颁发,这将提高 Web 上这一至关重要的部分的总体安全性。
但是,如果我们考虑该协议,它会产生副作用:假设您想使用 Joomla 构建一个新站点。您打开您最喜欢的 Web 主机站点,购买一个新的托管帐户并注册一个域名 - 由于现在是 2017 年,并且我们拥有 LetsEncrypt 之类的优秀服务,您将获得该新域名的免费 SSL 证书,该证书默认情况下已启用。几分钟后,您的域名就可以使用了,您可以上传您的 Joomla! - 然后,您就被黑了!为什么?因为您的 Web 主机自动为您的新域名获得了 SSL 证书,并且由于 CT 协议,该新证书(包括您的域名)立即与世界其他地区共享。监控 CT 流的攻击者找到了您的域名,并开始每隔几秒钟对其进行探测,直到您最终上传了 Joomla! 文件 - 发生这种情况后,攻击者执行了上面提到的漏洞利用。
保持平衡
这种攻击向量是安全性和可用性之间冲突的一个很好的例子,作为安全团队,我们经常面临这个问题。改进安装程序的安全性将需要一个额外的“所有权证明”步骤,要求用户删除安装程序生成的某个文件。此额外步骤可能会具有挑战性,尤其是对于没有经验的用户,并且会对可用性产生负面影响。因此,归根结底,我们经常问自己:这种攻击向量是否是一个现实世界中的可行场景,值得付出对可用性的负面影响,还是只是一个理论问题?
借助证书透明度,一个理论威胁变成了一个现实世界问题,需要一个安全团队立即实施的解决方案。我们将解决方案与最初的报告者(以及其他 CMS)共享,并选择了一个尽可能接近 Def Con 演讲(公开披露该向量)的发布日期。
到目前为止,Joomla! 是唯一一个调整其安装程序以应对这种新威胁的主要 Web 应用程序 - 所有这一切都是由一个在 Joomla 幕后辛勤工作的 小型志愿者团队 带来的,他们不断为最佳平衡而奋斗,确保 CMS 的安全.
Joomla! 安全突击队。