当前位置: 首页 > 科技观察

利用Opera浏览器中存储的XSS漏洞读取本地文件

时间:2023-03-16 20:14:40 科技观察

Opera管理着一个漏洞赏金计划,研究人员可以在该计划中报告Opera软件中的漏洞并获得奖励。这篇文章是我发现的一个漏洞——网页可以从用户那里检索本地文件的屏幕截图。考虑到Opera基于Chromium,我做的第一件事就是下载新版本的Opera浏览器并查看它们添加的新功能。其中一项功能称为OperaPinboard,“Pinboard”功能允许用户创建pinboard和共享pin,它基本上是一个可以与其他用户共享的笔记/书签保护程序,您可以向其中添加文本、图像和链接.此服务的URI是https://pinboard.opera.com/。但是,在Opera中打开此页面时,我被重定向到Opera:pinboards。opera:scheme是Opera中的一个特殊位置,类似于Chrome的chrome:,具有普通页面所没有的特殊权限。使用web代理,我发现当添加一个新链接作为pin到我的pinboard时,一个请求被发送到pinboard.opera-api.com是这样的:标签内的URI被浏览器解析并发送到pinboardAPI,然后添加到opera:pinboards中的本地版本。我的想法是,如果我可以向链接到javascriptURI的opera:pinboards添加一个pin,我就可以从特权场景执行跨站点脚本(XSS)。执行多次测试后,我发现可以修复URIjavascript:@opera.com,它在我的看板中显示为可点击的链接!这样,我们就有了XSS!经过多次尝试,我终于找到了有效载荷javascript:'@opera.com/';alert(1),当在我的看板内点击时会弹出一个窗口。但是有一个小问题:pinboard界面中的标签使用了属性target=_blank,这意味着在页面上点击任何链接都会在新窗口中打开,页面内部不会执行任何javascript。幸运的是,有一个小技巧:如果您命令(Ctrl)+单击或中键单击链接,代码将成功运行。通过在opera:pinboards页面上使用简单的XSS,我想表现出比单击链接时简单弹出更大的影响。如前所述,opera:方案比普通网页拥有更多权限:它还可以访问一些本机函数调用并允许查看其他选项卡,从而绕过浏览器的同源策略(SOP)。它还允许加载文件:scheme,可用于查看本地文件。但是,它不允许使用所有本机功能,这将允许完全控制和访问其他标签,例如,注入javascript会复制整个页面的内容并将其发送到我的服务器。因此,我制作了一个执行以下操作的脚本:使用本机函数chrome.tabs.create创建一个新选项卡,在此示例中,新选项卡打开file:///etc/passwd。使用OperaPinboards用于创建图钉缩略图的相同函数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/