官网:http://securitytech.cc/
当 CTF 遇上漏洞赏金:Opera 浏览器中的一个严重 UXSS

在 2023 年 9 月 25 日,我所在的团队 Super Guesser 正在韩国参加 WACON CTF 2023 线下总决赛。我设计了一道浏览器挑战题 “operaaa”:在最新版 Opera 中的一个存在漏洞的扩展。目标是什么?泄露其他已打开标签页的完整 URL。你仍然可以在 这里 试一试。
这是一道很难的题目,只有一支队伍解出来,就是 @jinu。预期解题路径是:
- 通过绕过 URL 检查在扩展中触发 XSS。
-
- 从 iframe 沙箱中逃逸。
-
- 找到一个隐藏的 Opera 域(不包含 “opera”),该域能访问 chrome.tabs()。
-
- 泄露已打开标签页的 URL(包含 flag)。
但赛后我发现 jinu 的解法完全是非预期的。他直接打到了一个带有 chrome.tabs() 访问权限的 Opera 特殊域上的 XSS。这一发现让我们从 CTF 题目转向了 真实的漏洞赏金:Opera 本身的一个严重 UXSS。
严格来说,这个 XSS 本来只是在 (gx.games) 域上的一个普通 WebView 漏洞,如果直接报告,大概能拿到 $300。但因为它能访问 chrome.tabs(),我们可以泄露任意 URL,甚至劫持任何基于 OAuth 的账号。以下是漏洞报告:
简介
我和 @jinu 一起研究 Opera 浏览器时,发现了 GX.games 里的一个严重 XSS,可以泄露其他来源的 URL 和用户隐私信息。再结合一个 OAuth 的小技巧,我们能够接管所有使用 OAuth 的网站账户。
XSS 发现
我们在 GX.games 上寻找漏洞时,发现了这个 URL:
https://gx.games/signup/
研究参数时,发现了 redirectUrl,于是我们试着把它放进 URL:
按回车或点击以查看完整图片

结果惊讶地发现,它真的跳转到了 example.com。那我们再尝试另一种 scheme —— javascript。在浏览器里 location='javascript:alert(origin)' 等价于 eval(code),于是试试:
按回车或点击以查看完整图片

很好,我们拿到了完整 XSS,用户不需要任何操作。由于这个域归 Opera 所有,它可能比普通页面有更高的权限。
opr 对象
我们查看了特殊的 opr 对象,发现它包含多个敏感功能,例如:显示反馈框、泄露登录用户的隐私信息、修改工作区、改变浏览器壁纸。
这些功能本不该被普通页面访问,非常关键。我们重点关注 opr.operaIdentityPrivate,看看能用来做什么。用如下代码,我们可以泄露当前浏览器登录用户的姓名和邮箱:
opr.operaIdentityPrivate.getFullname((x)=>{
opr.operaIdentityPrivate.getUseremail((j)=>{
alert('你的姓名和邮箱是: '+x+' '+j)
})
})
按回车或点击以查看完整图片

URL 泄露
进一步研究时,我们查看了 chrome 对象,发现它同样有一些危险能力。
按回车或点击以查看完整图片

重点关注 chrome.tabs。这组函数非常强大,可以跨域获取标签页的 URL 和标题。官方文档
利用 chrome.tabs.query,我们能获取浏览器中所有已打开的标签页,并访问它们的 URL 和标题。这是对浏览器安全模型的严重破坏。
从 URL 泄露到账号接管
真正的危险来自于把这个漏洞和 Opera 的 OAuth 流程(或任何 OAuth 应用) 链接起来。
Opera Sync 登录使用:
https://auth.opera.com/account/confirm-identity?...&state=<value></value>
按理说,OAuth 的 state 用来防止 CSRF。但这里的攻击手法是:
- 攻击者生成自己的
state。 -
- 受害者登录,并被重定向回来,URL 中带有 code + 受害者账号。
-
- 因为
state不匹配,受害者看到报错。
- 因为
-
- 但利用
chrome.tabs,我们能窃取完整的重定向 URL(包含 code)。
- 但利用
-
- 攻击者在自己浏览器里使用这个 URL,就能登录到受害者的 Opera Sync 账号。
这意味着可以完全接管浏览记录、会话,甚至——由于 OAuth 的普遍性——潜在地接管 Google、Facebook、Twitter 或任何使用 OAuth 的网站账户。
POC
chrome.tabs.create({
url:`https://auth.opera.com/account/confirm-identity?...&state=#Attacker_State`
});
setTimeout(()=>{
chrome.tabs.query({},(tabs)=>{
document.body.innerHTML = `
<h1 style="color:red">
pwned! 用这个 URL 登录受害者账号:<br />
<textarea cols="50" rows="10">${tabs[tabs.length-1].url}</textarea>
</h1>
`
})
},9000)
影响
- 受影响范围: Opera(PC、Mac、Linux)+ Opera GX(PC、Mac、Linux)
-
- 严重性: 严重(跨域 URL 泄露 + OAuth 账号接管)
-
- 更广泛风险: 打破同源策略,破坏全网的 OAuth 保护。
时间线
- 发现时间: 2023 年 9 月 26 日
-
- 修复时间: 2023 年 10 月 13 日
-
- 奖励发放: 2024 年 1 月 12 日 —— 每人 $4,000