Opera 管理漏洞赏金计划,研究人员可以在计划中报告 Opera 软件中的漏洞并获奖。
这篇文章是我发现的漏洞——网页可以从用户那里搜索本地文件的屏幕截图。
考虑到 Opera 是基于 Chromium 的,我做的第一件事就是下载新版本的 Opera 浏览器,查看它们添加的新功能。其中一个功能被称为Opera Pinboard,“Pinboard”该功能允许用户创建图钉并共享图钉。它基本上是一个笔记/书签保护程序,可以与其他用户共享。您可以添加文本、图像和链接。
此服务的 URI 是 https://pinboard.opera.com但是,在 Opera 打开这个页面时,我被重定向 Opera:pinboards。opera: scheme是 Opera 中的一个特殊位置与 相似Chrome 的 chrome:,普通页面没有特殊权限。通过使用网络代理,我发现新链接是 pin 添加到我的 pinboard 发送请求时pinboard.opera-api.com,如下所示:
标签内的 URI 由浏览器分析并发送到 pinboard API,然后添加到 opera:pinboards 本地版本。
我的想法是,如果我能链接到 javascript URI 的 opera:pinboards 加一个 pin,我可以从特权方案中实施跨站脚本 (XSS)。经过多次测试,我发现固定 URI javascript:@opera.com 是可能的,它在我的 pinboard 显示为可点击链接!这样,我们就有了 XSS!
经过多次尝试,我终于想出了有效载荷 javascript:'@opera.com/';alert(1),它在我的pinboard内单击会导致弹出窗口。但是,有一个小问题:pinboard 界面中的标签使用属性 target=_blank,这意味着在页面上点击的任何链接都将在新窗口中打开,并且不会在页面执行 javascript。幸运的是,有一个小技巧:如果你命令 (Ctrl) 单击或中键单击链接,代码将成功运行。
通过在opera:pinboards 页面使用简单XSS,我想显示比点击链接更大的影响。
如前所述,opera: scheme它比普通网页有更多的权限:它还可以访问本机函数调用,并允许查看其他选项卡,绕过浏览器的同源策略 (SOP)。还允许加载文件:scheme,可用于查看本地文件。但是,它不允许使用所有的本地函数,这将允许完全控制和访问其他标签,例如注入javascript将整个页面的内容复制并发送到我的服务器。
这样,我就制作了一个脚本来执行以下操作:
- 使用本机函数 chrome.tabs.create 创建新的选项卡,在本例中打开 file:///etc/passwd。
- 使用 Opera Pinboards 创建 pin 相同图的相同函数 opr.pinboardPrivate.getThumbnail 创建开放选项卡屏幕截图。
将截图以base64编码的PNG将格式发送到我的服务器,然后我就可以查看了。
创造新的 pinboard 为了执行上述所有步骤,我添加了一个新的 pin,点击时,会发送我盗窃的 /etc/passwd 文件屏幕截图。BugCrowd页面向Opera发送了这个概念的视频证明。
本文中提到的漏洞已被修复。
本文翻译自:
https://blogs.opera.com/security/2021/09/bug-bounty-guest-post-local-file-read-via-stored-xss-in-the-opera-browser/