这篇文章将演示一个简单的缝隙。操纵这个缝隙,不必用户交互便可获得肆意Facebook帐号的完全节制权。请看下文。
Facebook承诺你将本身的手机号与帐号进行联系关系。这让你可以通太短信领受更新信息,同时也意味着你可以经由过程手机号而不是邮件地址进行登录。
缝隙位于“/ajax/settings/mobile/confirm_phone.php”。它接管多个参数,但此中有两个最首要:一个是发送到手机上的验证码,一个是profile_id,就是手机号码的联系关系账户。
关头标题问题是,当然profile_id应当设置为你本身的帐号(不言而喻的),但把它点窜成方针帐号的值竟不会引发任何弊端。
为了操纵这个缝隙,我们起首给Facebook在英国的短信办事号32665发送字母F。在答复的短信中,我们可以获得8个字符的验证码。
我们把这个验证码输进到暗码框中(在这里),并且点窜fbMobileConfirmationForm表单中的profile_id元素。
要求提交后会返回成功(HTTP 200)。你会发现__user(与AJAX要求一路发送)的值与我们点窜的profile_id不合。
寄望:提交这个要求后,你或许不克不及不从头认证,可是要填写的暗码是你本身的,而不消填方针帐号的。
然后你会收到认证成功的短信。
此刻,针对已登录的用户,我们可以提交一个重置暗码的要求,并设置通太短信获得重置验证码。
随后你会收到一条新短信,里面有重置验证码。
我们把这个验证码填进表单中,换一个新暗码,如许我们就完成了全部过程。这个帐号已被我们节制了。
修复方案
Facebook不再接管用户提交的profile_id变量。
缝隙措置
2013.05.23 – 缝隙反馈给了Facebook
2013.05.28 – Facebook确认了该缝隙
2013.5.28 – 标题问题被修复
寄望
这个缝隙的奖金高达2万美元,这也反应了标题问题标严重性。