Firefox中的一些次要安全特性问题
最近我在Firefox中发现了一些或多或少次要的安全问题。它们都不是特别可怕,但影响了有趣的边缘情况或异常行为。我发布这篇文章主要是希望其他人能从中获得灵感,思考不寻常的安全问题,并可能为这些漏洞想出更现实的攻击场景。
我想指出的是,尽管所有这些问题都在几个月前被报告,但Mozilla尚未修复大多数问题。
通过FTP绕过XSA警告
XSA或跨站认证是一种有趣且不太为人知的攻击。它由Joachim Breitner在2005年发现。
一些网页,主要是论坛,允许用户包含第三方图像。攻击者可以滥用这一点来窃取其他用户的凭据。攻击者首先发布一些包含他控制的服务器上的图像的内容。然后他为该图像启用HTTP认证。现在所有访问该页面的访问者都会在该页面上看到一个登录对话框。他们可能会 tempted 在HTTP认证对话框中输入他们的登录凭据,这似乎来自他们信任的页面。
正如所说,原始的XSA攻击相当古老。作为对策,Firefox在由子资源(如图像)创建的HTTP认证对话框中实现了警告。然而,它只对HTTP这样做,而不对FTP这样做。
因此,攻击者可以运行一个FTP服务器并从那里包含一个图像。然后通过要求FTP登录并记录所有登录尝试到服务器,他可以收集凭据。密码对话框将显示攻击者的FTP服务器的主机名,但他可以选择一个看起来与目标网页足够接近的主机名,以不引起怀疑。
我还没有发现任何允许嵌入来自非HTTP协议的图像的流行网站。最允许嵌入外部图像的流行页面是Stack Overflow,但它只允许HTTPS。一般来说,嵌入第三方图像在这些日子里不太常见,大多数页面如果嵌入外部图像会保留本地副本。
这个漏洞尚未修复。
显然,可以通过为FTP显示与HTTP认证相同的警告来修复它。但我更建议完全阻止第三方内容上的认证对话框。这也是Chrome正在做的事情。Mozilla已经讨论了好几年,但没有结果。
Firefox还有一个关于不允许子资源上的FTP的开放漏洞。这显然也会修复这个场景。
通过FTP的窗口模态弹窗
在JavaScript的早期,网页可以用弹窗 annoy 用户。浏览器此后改变了JavaScript弹窗的行为。它们现在是标签模态的,这意味着它们不会阻止与整个浏览器的交互,它们只是一个标签的一部分,只会阻止与创建它们的网页的交互。
因此,现代浏览器的目标是不允许网页创建阻止与整个浏览器交互的窗口模态警报。然而,我发现FTP给了我们一个绕过这个限制的方法。
如果Firefox通过FTP连接接收到一些随机垃圾,它无法将其解释为FTP命令,它将打开一个显示该垃圾的警报窗口。
首先,我们打开我们的假“FTP服务器”,它将简单地向所有客户端发送一条消息。我们可以只使用netcat来实现这一点:
|
|
然后我们尝试打开一个连接,例如在同一系统上的地址栏中输入ftp://localhost。Firefox不会立即显示警报。然而,如果我们然后点击URL栏并再次按回车,它将显示警报窗口。我尝试用JavaScript复制该行为,有时有效。我相对确定这可以变得可靠。
这里有两个问题。一个是服务器控制的内容在没有任何解释的情况下显示给用户。这个警报窗口似乎是某种错误消息。然而,这样并没有太多意义。如果有什么,它可能应该以一些消息为前缀,如“服务器发送了无效命令”。但最终,如果浏览器接收到随机垃圾而不是协议消息,显示它可能并不明智。第二个问题是FTP错误消息可能也应该是标签模态的。
这个漏洞也尚未修复。
FTP被认为危险
FTP是一个有许多问题的旧协议。一些人认为浏览器仍然支持它是一个问题。我倾向于同意,理想情况下,FTP应该简单地从现代浏览器中移除。
浏览器中的FTP在设计上是不安全的。虽然存在启用TLS的FTP,但浏览器从未支持过它。FTP代码可能没有经过很好的审计,因为它很少使用。另一个协议存在的事实,可以类似于HTTP使用,有潜在的惊喜。例如,我发现了解到可以对启用了HSTS的主机进行未加密和未认证的FTP连接是相当令人惊讶的。(FTP上缺乏cookie支持似乎避免了引起安全问题,但它仍然是意外的,感觉危险。)
书签管理器导出中的自XSS
Firefox书签管理器允许将书签导出到HTML文档。在当前的Firefox 57之前,可以通过标签字段将JavaScript注入到这个导出的HTML中。
我试图想出一个 plausible 的场景,这可能会很重要,然而这被证明是困难的。如果有一种方式让网页创建这样的书签,这将是一个有问题的行为。虽然可以用JavaScript创建一个书签对话框,但这不允许我们预填标签字段。因此,网页无法在这里插入任何内容。
人们可以想出 implausible 的社会工程场景(网页要求用户创建一个书签并在标签字段中插入一些特定字符串),但这似乎非常牵强。一个 remotely plausible 的场景是浏览器可以被多个人使用,他们被允许创建书签,并且书签 regularly 导出并上传到网页。然而,那也似乎相当牵强。
这在最新的Firefox版本中作为CVE-2017-7840被修复,并被认为是低严重性。
通过通知API在Linux上崩溃Firefox
通知API允许浏览器发送通知警报,操作系统将在小通知窗口中显示。通知可以包含一条小消息和一个图标。
当玩这个时,我首先想到的事情之一是检查如果一个人简单发送一个非常大的图标会发生什么。用户必须批准网页被允许使用通知API,然而如果他这样做,结果是浏览器的立即崩溃。这只在Linux上“有效”。概念证明非常简单,我们只是通过数据URI嵌入一个大的黑色PNG:
|
|
我没有 fully tracked down 是什么导致了这一点,但似乎Firefox尝试用libnotify向系统的通知守护进程发送一条消息,如果这对于dbus的消息大小限制来说太大,它将不会 properly handle 产生的错误。
我发现相当 frustrating 的是,当我报告它时,我了解到这是一个重复的漏洞,已经在一年多前被报告。我觉得让这样一个简单的浏览器崩溃漏洞开放这么长时间是不合适的。它仍然未被修复。