Facebook最近推出了忘记密码的手机登录功能,我发现该功能中的二维码扫描存在漏洞,可以利用其进行CSRF攻击,劫持其它Facebook账户。

01.png

当我的手机中跳出这个二维码扫描登录界面时,我就想尝试对它进行一些安全测试。首先,我就想到了利用在线服务 QrCode Decoder 来解码二维码信息,解码信息如下:

02.png

得出的对应登录链接为:

 https://m.facebook.com/xdl/approve/?n=AYK8pQLRNK7UtXH77qI48xUnEHXb0rf2ySjUTHVjA6H-pU5gkI1JPYzit6wCp2z1tTNKZbXScD4MUshQuaP5M9H9j0e_x2ZK0ee9jkjLvv5-sQ&d=AYItt0ByoBCJEFQNGwike6sOHJyPJvDTCOruRgesi-7vvdIm4T3g22-FUW0f0Jph6gPYE3t10SddJ-rS7fg-z9VI&ext=1512136729&hash=AYKa_wmq-7CeeTac

打开该链接后提示成功登入:

03.png

在请求处理过程中,为了保证二维码信息不会过期,利用BurpSuite抓包并转发至repeater中进行测试,而当我把保存缓存token的fb_dtsg值由 AQG8uIRB5b_U:AQHYfzdc7VMV 更改为  AQG8uIRB5b_U:AQHYfzdc7AB之后,服务端竟然还能有效接收!(因涉及隐私抱歉此处不上图-_-)

由此,我立马创建了一个CSRF格式请求:

04.png

哦,该请求被拒绝了:

05.png

经过对Facebook二维码机制作了了解,监测分析了所有请求流量,并对brainfuc*k编译语言进行学习之后,我才明白受害者只要第一次点击那个链接之后,Facebook服务器触发到二维码扫描功能,只有第二次点击才能实现CSRF攻击,因此,我把上述CSRF代码作了及时调整:

06.png

最终CSRF请求成功,在对3-4个账户间进行测试后,漏洞确定有效,这种方法可针对受害者在密码重置时进行攻击,从而实现账户劫持。

07.png

PoC视频:

http://v.youku.com/v_show/id_XMzIyNzUxMDAwMA==.html

NND,向Facebook上报该漏洞后,经过3天多时间的等候,他们竟然说我的漏洞已经有人上报了,而且还不会给我任何奖励,唉,也没关系了,就当是练练手。

08.jpg

*参考来源:securitybreached,freebuf小编clouds编译