【白帽故事】$8000赏金奖励:Opera浏览器从XSS 到 RCE

渗透技巧 2年前 (2022) admin
532 0 0

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

本篇文章共1297字,预计阅读时间4分钟。


背景介绍:


今天的故事来自国外一位名为Renwa的白帽子(https://twitter.com/RenwaX23),这也是他提交给Opera的第二个漏洞-Opera 的 My Flow 功能中的远程代码执行漏洞,当然,该漏洞在本篇文章发布前已得到修复。


什么是My Flow?


Opera 浏览器最酷的功能之一就是My Flow,它基本上是计算机和手机之间的共享空间,允许你与手机共享链接、图像和视频,只需要扫描相应的二维码,你就可以在设备之间共享发送内容。


【白帽故事】00赏金奖励:Opera浏览器从XSS 到 RCE


漏洞发现


使用 Opera 中的开发人员工具,可以发现My Flow界面是从域web.flow.opera.com加载的,它只是一个普通的 HTML 页面,并且允许查看其代码和组件。


通过查看页面源代码,白帽小哥发现该页面与浏览器扩展程序进行通信,但是从浏览器扩展程序列表中的opera://extensions/,却无任何发现。经过一番研究,白帽小哥发现它实际上是一个隐藏的浏览器扩展,可以通过使用特殊命令打开 Opera 来显示,–show-component-extension-options,通过这个特殊命令打开后,可以成功看到名为Opera Touch Background的扩展程序,并且能够查看其源代码。


回到 web.flow.opera.com 页面,白帽小哥开始寻找 XSS 漏洞,下面这段代码成功引起了他的注意:


const html = e.dataTransfer.getData('text/html');const src = html.match(//);if (src && src[1]) {   const parser = document.createElement("span");   parser.innerHTML = src[1];}


该功能主要用拖放,当用户将图像放到页面上时,代码会创建一个元素,并将其 innerHTML 元素设置为图像的位置,但是,这样做会有两个问题:


  1. 在浏览器中,可以将 dataTransfer 设置为任意值


  2. 在浏览器中,如果创建一个新元素并将其 innerHTML 设置为 <img> 标签,会在后台继续加载


这就意味着尽管屏幕上没有加载图像,但以下代码会弹出一个警告框:


const parser = document.createElement("span");parser.innerHTML = '<img src=x onerror=alert(1)>';


于是白帽小哥创建了一个 XSS POC,为了展示引发 XSS 的难易程度,他创建了一个网页,一旦开始拖动图像,几秒钟后就会重定向到 web.flow.opera.com 页面,这就意味着用户只需要拖动图像,然后松开鼠标的同时,XSS 就会发生!


【白帽故事】00赏金奖励:Opera浏览器从XSS 到 RCE


但是,白帽小哥并不满足,于是继续研究 Opera Touch Background 扩展的实际作用,事实证明,它具有更高的权限,甚至拥有对本机函数的访问权限,例如opr.operaTouchPrivate,它是为与 My Flow 应用程序一起使用而开发的函数集合,查看可用功能,有两个案例引起了白帽小哥的注意:SEND_FILEOPEN_FILE。


SEND_FILE 函数检索有关用户提供的文件信息并将其上传到 My Flow,它还将文件保存到用户计算机的Downloads/MyFlow中。而OPEN_FILE 则用于 My Flow 的图像文件,但在测试时发现它可以打开任何类型的文件,而不仅仅是图像文件。


有了这两个功能,我们岂不是可以在目标计算机上写入和打开任意文件了?于是白帽小哥立刻创建POC场景,首先创建一个包含calc的文件exploit.bat,然后打开该文件——这将导致它被执行并打开 Windows 计算器:


operaTouchBackground.port.postMessage({   type: "SEND_FILE",   name: 'exploit.bat',   content: 'calc',   file_type: 'image/png'});
operaTouchBackground.port.postMessage({ type: 'OPEN_FILE', localFileName: 'exploit.bat'});


最后只需借助一个让人们信任的用户界面,然后让用户单击(拖动)即可激活漏洞利用了!


【白帽故事】00赏金奖励:Opera浏览器从XSS 到 RCE


漏洞在上报几天后即得到了修复,并在大约三周后给予白帽小哥8000美刀的赏金奖励。


====正文结束====

原文始发于微信公众号(骨哥说事):【白帽故事】$8000赏金奖励:Opera浏览器从XSS 到 RCE

版权声明:admin 发表于 2022年1月18日 上午8:04。
转载请注明:【白帽故事】$8000赏金奖励:Opera浏览器从XSS 到 RCE | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...