Opera浏览器跨平台0-Day RCE漏洞


Opera浏览器跨平台0-Day RCE漏洞

1.漏洞情况

Opera浏览器跨平台0-Day RCE漏洞


Guardio Labs研究团队近日在流行的Opera Web浏览器系列中发现了一个严重的0day漏洞, 该漏洞允许攻击者使用定制浏览器扩展在Windows或MacOS系统上执行恶意文件。这一发现不仅突显了Opera浏览器内部的脆弱性,也反映了现代浏览器安全领域的更广泛挑战。

我们主动向Opera团队披露漏洞信息,并得到他们迅速的回应,典型地展示了安全研究人员与浏览器开发者之间在保护用户方面的关键合作。这篇文章旨在揭示研究过程和发现的漏洞的复杂细节,以及持续努力保护数字体验免受不断演变的网络威胁的工作。

Opera浏览器跨平台0-Day RCE漏洞包含漏洞的My Flow卡片


Opera浏览器跨平台0-Day RCE漏洞

2.My-Flow RCE漏洞

Opera浏览器跨平台0-Day RCE漏洞


Opera的My Flow功能以其在Opera浏览器中实现的无缝笔记和文件共享而脱颖而出。只需使用Opera移动应用扫描QR码,即可进入一个类似于聊天界面的界面,用于交换消息和文件。

Opera浏览器跨平台0-Day RCE漏洞

典型的My-Flow活动包括记笔记和打开从移动设备发送的附带文件

然而,从网络安全的角度来看,有一个方面值得注意。类似聊天的界面向任何带有附加文件的消息添加了一个“OPEN”链接,允许用户直接从Web界面执行该文件。这表明网页上下文可以以某种方式与系统API进行交互,并从文件系统中执行文件,超出浏览器常规限制,没有沙盒,没有限制。

尽管这一功能很方便,但它暴露了高潜在的安全风险,因此团队需要进一步调查。在漏洞研究中,我们识别了高风险的向量,如上述情况,并彻底检查了所涉及的体系结构、开发和安全协议,旨在找出可能被利用的安全漏洞或逻辑错误 — 结果确实发现了一个重大漏洞。


Opera浏览器跨平台0-Day RCE漏洞

3.隐藏的内置扩展

Opera浏览器跨平台0-Day RCE漏洞


与当今许多流行的浏览器一样,Opera是基于Chromium开源项目构建的。它与 Chromium共享许多核心代码、功能和设计。为了脱颖而出并提供独特的功能,Opera 利用了Chromium的内置自定义选项,其中之一包括内置浏览器扩展的概念。

与从浏览器商店安装的扩展程序类似,这些内置扩展程序增强了功能并添加了新功能。然而,一个关键的区别是内置扩展是预安装在浏览器中的,无法禁用或控制,并且可以拥有更广泛的功能和权限。

出于好奇,可以通过浏览器的开发工具了解这些扩展,你可以在其中检查浏览器的内部工作原理 – 只需浏览opera://inspect并选择“扩展”:

Opera浏览器跨平台0-Day RCE漏洞

检查窗口中内置的”Opera Touch Background”扩展

使用扩展程序可以实现特殊的“My Flow”功能Opera Touch Background,该扩展程序负责所有内部运作。

与任何其他扩展一样,它引入了一个声明所有权限和功能的清单文件。其中,应该特别注意以下externally_connectable声明:

"externally_connectable" : { 
    "匹配" : [
      "https://*.flow.opera.com/*" ,
      "https://*.flow.op-test.net/*" 
    ]
}

上面的意思是只有声明的域下的网络资源才能与此扩展通信。这是通过chrome.runtime.connectAPI 完成的,使网页可以访问该强大扩展中所有声明的处理程序。

检查扩展代码本身的侦听器会揭示 My Flow 可以访问的一些特殊功能:

port.onMessage.addListener(data => {
    switch (data.type) {
      case 'GET_PAIRING_TOKEN':
        wrapResponse(this.getPairingToken(data.value), data);
        break;

      case 'GET_DEVICES':
        wrapResponse(this.getConnectedDevices(true), data);
        break;

   ...

      case 'OPEN_FILE':
        wrapResponse(this.openFile(data.localFileName), data);
        break;
      case 'SEND_FILE':
        wrapResponse(
            this.sendFile(
                data.name, data.content, data.file_type, data.preview,
                data.messageId, data),
            data);
        break;
   case 'DOWNLOAD_FILE':
              wrapResponse(
                  this.downloadFile(
                      data.url, data.name, data.iv, data.messageId, data),
                  data);
              break;
     ...
 }
});

深入研究OPEN_FILE中的代码,我们发现它最终访问浏览器核心对象下的本机私有 API:opr.operaTouchPrivate.openFile(String filename).这同样适用于DOWNLOAD_FILE在本地操作系统上的特定目标中创建文件:

~/Downloads/MyFlow/

Opera浏览器跨平台0-Day RCE漏洞

体系结构 — 从触摸应用到My-Flow Web脚本和嵌入的高权限扩展

考虑一下可能性 — 如果找到一种调用这些处理程序的方法,最终就可以下载任何类型的有效负载,并在目标系统上执行,而无需用户干预。这是一个具有潜在恶意攻击的强大攻击向量!

为此,首先需要找到一种从opera.com声明的域的上下文中运行自己控制的代码的方法。


Opera浏览器跨平台0-Day RCE漏洞

4.利用Opera控制的域权限

Opera浏览器跨平台0-Day RCE漏洞


Opera浏览器有一项重要的安全措施, 只有Opera控制域下的资源才能访问我们在这里定位的DOWNLOAD_FILEOPEN_FILE处理程序。

首先想到的是XSS(跨站脚本)——通过控制可能触发代码漏洞的不同输入(例如URL参数或POST数据), 将任意javascript代码注入到从相关域加载的网页中。只需要制作相关的URL并让受害者点击执行, 让它在opera域下运行恶意代码。事实上,两年前已经出现类似的攻击流程并已向opera报告, 因此,我们必须假设该页面现在已经编写得很好,对这类漏洞具有免疫力。


Opera浏览器跨平台0-Day RCE漏洞

5.通过扩展控制注入代码

Opera浏览器跨平台0-Day RCE漏洞


另一种更直接的注入代码的方法是使用扩展。想象一下一个具有通用权限的正常扩展,就像用户每天安装的任何其他广告拦截器和类似工具一样。一旦安装到浏览器上,扩展可以通过几种方法将代码注入到目标URL中 — 在这种情况下,即从 flow.opera.com 加载的任何页面。

尝试的第一种选项是扩展API调用 chrome.tabs.executeScript,该调用将脚本注入并执行到主网页上下文中。由于Opera直接在其浏览器代码中引入了特定的安全策略,这在该域中是被阻止的。这类似于Google的Chrome禁止扩展在Chrome商店页面上执行代码。到目前为止,Opera做得不错。

另一个选项是 WebRequest/DeclerativeNetRequest API,这些API在目标的域上是被允许的。通过这些权限,通常由广告拦截扩展使用,可以更改页面对特定资源的请求,使其获取不同的资源。在现在的情况下,页面 flow.opera.com 请求来自 /ext/v1/scripts.js 的javascript文件,因此可以通过简单的规则将其切换为获取自己构建的文件。

好吧,这一次我们遇到了下一个障碍,即CSP:

Opera浏览器跨平台0-Day RCE漏洞

由于 CSP 阻止加载注入的脚本而打印的错误日志

CSP(内容安全策略)是一种Web安全标准,用于通过指定可信的内容源来防止 XSS、点击劫持和其他代码注入攻击。在这种情况下,自己制作的脚本不是由经过批准的来源提供的,因此无法执行!这可以在原始Opera控制的web应用程序页面上声明此策略的元标记中看到:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://flow-dev.operacdn.com https://flow.operacdn.com">

除此之外,脚本标签本身还包括SRI(子资源完整性)形式的额外安全级别:

<script src="https://flow.operacdn.com/ext/v1/scripts-1673951285900.js" defer="" integrity="sha256-0vAferkk3jK3H8s/xAEmiM1WNl6rUWIr+bEExaTCcAA=" crossorigin="anonymous"></script>

上述的完整性属性确保加载的脚本具有指定的哈希值。除非我们碰巧在地下室里有一台量子计算机,否则无法绕过这个检查… 因此,即使我们成功更改了脚本内容,由于具有不同的哈希值,它在浏览器端加载和执行时也将失败。Opera, 厉害了我的哥。


Opera浏览器跨平台0-Day RCE漏洞

6.克服 CSP/SRI 的一个惊人之法

Opera浏览器跨平台0-Day RCE漏洞


嗯,一定还有其他方法…

*.flow.opera.com系列中的域名用作Opera的多个产品的生产应用,包括不同版本,甚至可能是测试/开发版本。这些是否给我们提供了更多的利用机会呢?

使用urlscan.io(https://www.urlscan.io/)快速搜索该域系列下的历史扫描给了我们有趣的结果!urlscan.io 是一个安全工具,通过扫描和检查网页来分析并提供有关URL内容和安全性的详细报告。因此,它还让我们了解每个域的使用历史。在这种情况下,一些长期被遗忘的随机HTML页面位于这些域下,甚至在几年后仍然可用!

在发现的内容中,我们看到同一个 My Flow 登陆页面的许多不同版本 – 包括这个特定的 2 年前的版本:

Opera浏览器跨平台0-Day RCE漏洞

使用 URLscan 从目标主机快速搜索相关页面扫描 — urlscan.io

该页面本身看起来与当前生产中的页面非常相似,但背后的变化在于:它不仅缺少 CSP 元标记,而且还包含一个调用 javascript 文件的脚本标记,而无需任何完整性检查。没有 CSP,没有 SRI — 看起来好得令人难以置信:

<head>
  <!-- disable Service Worker <link rel="manifest" href="manifest.json"> -->
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content=".....">
  <!-- NO CSP tag! -->
  <link rel="icon" href="https://flow.operacdn.com/ext/v1/img/....">
  <title>My Flow</title>
  <link rel="stylesheet" href="https://flow.operacdn.com/ext/v1/....">
</head>
..
..
<!-- NO SRI attribute! -->
<script src="https://flow.operacdn.com/ext/v1/scripts-1633701575733.js" defer=""></script>

这正是攻击者所需要的——不安全、被遗忘、容易受到代码注入攻击的资产,最重要的是——可以访问(非常)高权限的本机浏览器 API!


Opera浏览器跨平台0-Day RCE漏洞

7.模拟“My Flow”发送恶意有效负载

Opera浏览器跨平台0-Day RCE漏洞


长话短说,现在可以创建一个简单的扩展概念验证,通过一些简单的步骤,将文件下载到受害者的计算机上并执行它。

这里只缺少一个构建块,那就是有效负载本身。如何将文件发送到受感染的浏览器?嗯,这一次是纯粹的逆向工程和自动化案例。我们意识到浏览器本身(例如扩展代码)可以模拟My Flow应用程序的相同活动,因为它们都在`flow.opera.com`.

首先,扩展通过调用flow.opera.com/v1/devices创建一个新的设备实例,提供一些假的移动设备详细信息以及将用于加密文件有效负载的公钥。作为回报,我们得到了一个DEVICE ID以及一个TOKEN。接下来,使用GET_PAIRING_TOKEN处理程序向浏览器请求配对令牌。这将返回由你手机上的应用程序扫描的QR码值,以将其与浏览器配对。

Opera浏览器跨平台0-Day RCE漏洞

用于将 Opera Touch 应用程序与浏览器配对的 QR 码及其值

现在,将上述数据发送到https://flow.opera.com/v1/connect-devices,以使假设备与浏览器连接并配对。

下一个明显的步骤是模拟从假移动设备到浏览器的文件传输,启动其下载和文件打开操作。Opera 对在设备之间发送的文件进行加密(因为这些文件存储在其服务器上以允许此活动),因此应该首先使用之前交换的相关密钥来加密恶意负载。

尽管如此,我们还是意识到了更好的方法。浏览器用于向移动设备发送文件的SEND_FILE处理程序具有一个有趣的副作用 – 它在与MyFlow相同的文件夹中保存所发送文件的副本。该处理程序还可以将文件内容作为blob获取 — 因此我们刚刚找到了另一种直接从扩展生成任何恶意文件到主机文件系统的快速方法!

Opera浏览器跨平台0-Day RCE漏洞

利用 SEND_FILE 命令生成任何本地文件以供稍后执行

现在我们的文件已经位于系统中的相关文件夹中,我们可以触发OPEN_FILE调用,完成了。文件将从受感染浏览器操作系统的本地存储中执行。


Opera浏览器跨平台0-Day RCE漏洞

8.最后一个障碍 — 从零到一键触发

Opera浏览器跨平台0-Day RCE漏洞


现在我们遇到了另一个最后的障碍,即对FILE_OPEN调用的权限阻止。看起来像是对这种类型的操作的调用必须来自特定的上下文,因为我们收到了这个错误:

Opera浏览器跨平台0-Day RCE漏洞

直接调用OPEN_FILE时出现的错误代码

在对My Flow API的探索中,我们观察到触发OPEN_FILE操作需要一个点击事件,而且,这个方法确实成功了。然而,这将攻击动态从零点击转变为一键场景。虽然一键攻击的威力不如零点击攻击,但它的设计却出奇的简单。

我们只需要用户在屏幕的任何位置点击一下。但是,嘿,我们已经让用户安装了一个扩展(假装它是一个特殊的广告拦截器或类似的诱惑),并且安装任何新的扩展后,都会出现我们都习惯的“感谢您安装”页面:

Opera浏览器跨平台0-Day RCE漏洞

动态更改原始页面以模仿扩展安装感谢页面

我们已经将代码注入到这个新选项卡中,该选项卡滥用了域中被遗忘的资产flow.opera.com。这样就可以快速注入一些简单的代码来动态地修改此页面,使其类似于简单的感谢页面 – 只需提示用户单击任意位置即可开始。这是一种简单而有效的方法。


Opera浏览器跨平台0-Day RCE漏洞

9.完整范围的攻击扩展POC

Opera浏览器跨平台0-Day RCE漏洞


为了演示完整的概念验证 (POC) 攻击流程,考虑一下攻击者如何利用 Opera 中新发现的漏洞,从而可能在全球众多用户的计算机上安装恶意负载。

攻击从浏览器扩展开始,巧妙地伪装成 AdBlocker。这种伪装不仅吸引了广泛的日常安装,而且还授予了利用的必要权限——特别是DeclerativeNetRequest. 此权限允许用我们的有效负载替换原始脚本请求,将其伪装在执行标准广告拦截功能的众多其他规则中。

用户安装此扩展后,处理程序会立即在新选项卡中OnInstalled打开来自域的易受攻击的页面。flow.opera.com此操作会启动漏洞利用的恶意阶段:

Opera浏览器跨平台0-Day RCE漏洞

漏洞利用——安装恶意扩展,自动触发攻击链执行代码

然后,我们精心设计的 JavaScript代码被注入到该页面中,巧妙地改变其外观并实现与 Opera Touch Extension 的交互。这种交互旨在模拟移动设备与浏览器配对、传输恶意文件并执行它,在不到一秒的时间内完成攻击流程。

Opera浏览器跨平台0-Day RCE漏洞

利用 POC 扩展 — 从安装到代码执行(<1 秒)

正如 POC 运行所示,该漏洞可以在一秒钟内在目标操作系统(无论是 Windows 还是 MacOS)上执行文件。这种快速执行凸显了该漏洞被恶意利用的惊人潜力。


Opera浏览器跨平台0-Day RCE漏洞

10.漏洞披露并与 Opera 合作

Opera浏览器跨平台0-Day RCE漏洞


发现此漏洞后,我们立即联系 Opera 团队,全面披露了该问题并分享了我们的所有发现。当时,没有证据表明该漏洞在野外被积极利用,但无法确定。因此,首要任务是充分通知Opera并以任何可能的方式协助纠正问题。

Opera工程团队的响应迅速而有效。在披露后的短短五天内,他们通过从服务器中删除有问题和不安全的资产来实施修复中最关键的部分。


Opera浏览器跨平台0-Day RCE漏洞

11.补救措施和最终想法

Opera浏览器跨平台0-Day RCE漏洞

虽然Opera的生产服务器上目前没有已知的易受攻击的资产,但由于人为错误或易受 XSS 影响的新代码更新,此类问题在未来再次出现的可能性仍然存在。这凸显了 Opera 以及一般 Chromium 基础设施需要进一步进行内部设计更改。举个例子,通常禁用专用生产域上的第 3方扩展程序权限 – 就像在 Chrome 的网上商店中所做的那样。


原文链接:https://labs.guard.io/myflaw-cross-platform-0-day-rce-vulnerability-discovered-in-operas-browsers-099361a808ab

原文始发于微信公众号(二进制空间安全):Opera浏览器跨平台0-Day RCE漏洞

版权声明:admin 发表于 2024年1月19日 下午2:03。
转载请注明:Opera浏览器跨平台0-Day RCE漏洞 | CTF导航

相关文章