Facebook 开出历史最高赏金,55,000 美元奖励十年漏洞发现者

clipboard.png

技术编辑:徐九丨发自 Highway
SegmentFault 思否报道

近日,一名研究人员在 Facebook 平台上发现了一个严重的漏洞,该漏洞涉及登录的 Facebook OAuth 框架,可被用来劫持用户的 Facebook账号。由于发现了这个漏洞,该名研究人员获得了 Facebook 开出的账户劫持的单个最高漏洞奖励 —— 55,000 美元。

Facebook OAuth 框架缺陷

发现漏洞的研究人员名字叫 Amol Baikar 。它在一篇博客文章中透露到,该漏洞存在于"Login with Facebook"功能中。因此,当用户通过 Facebook 登录其他网站时,对手可能会劫持访问令牌。这不仅可以入侵 Facebook 账户,还可以访问相应的第三方服务。

“Login with Facebook”功能遵循 OAuth 2.0 授权协议在 facebook.com 和第三方网站之间处理用户的 token,只有当正确身份的用户token被验证通过,用户才能从第三方网站跳转到facebook.com网站。

攻击者利用该漏洞可以劫持受害者用户的 OAuth 身份验证机制,窃取受害者用户的 access token,最终实现对受害者 Facebook 账户的劫持。另外,攻击者可以通过控制架设恶意站点,针对大多数 APP 应用(如Instagram, Oculus, Netflix, Tinder, Spotify等),窃取用户 access_token,获取相关交互服务和第三方网站的访问控制权。

Baikar 在解释正常的登录流程时表示:

适用于 JavaScript 的 Facebook SDK 使用“/connect/ping”终结点发出 user_access 令牌,并将“XD_Arbiter”所有应用程序默认设置为白名单的 URL 重定向到该 URL。在后台,SDK 在初始化时会创建用于跨域通信的代理 iframe。代理框架通过 postMessage()API 发回令牌,代码或未经授权的未知状态。

但是只要端点足够安全,就可以防止已知的登录绕过策略,但有两个要点使利用页面代理成为可能,这进一步暴露了跨域通信。正如 Baikar 所说:

  • 缺少“X-Frame-Options”标题。(完全脆弱的流程)
  • 另外,“window.parent”本身将用户交互保存为零。无需理会 window.open 或任何按钮的 onClick 事件。

现在,跨域通信已经公开,并且在没有受害者知识的情况下,access_token 将“泄漏到任何来源”,然后攻击者可以设置新的电话号码以进行恢复。 当 Facebook 最初解决此问题时,研究人员发现 OAuth 的核心终结点“ /dialog/oauth/”继续重定向到页面代理。

在收到漏洞提醒后,Facebook 提出了相应的修复措施:

  • 不允许对xd_arbiter的任意修改,只接受单纯的文件路径”xd_arbiter.php”;
  • 禁用所有xd_arbiter上的HTTP跳转;
  • 删除page_proxy资源“7SWBAvHenEn.js”;
  • 在另外一个JS脚本资源中增加正则过滤验证。

Facebook 开出历史最高赏金

根据 Baikar 在博客中所说,该漏洞存在了将近 9 到 10 年。最初,当 Baikar 就该漏洞与 Facebook 取得联系时,这家科技巨头迅速承认了该漏洞并开发了修复程序。最终,Facebook 开发了另一个修复程序,解决了这个已有十年历史的漏洞。而 Baikar 也获得了 Facebook 开出的历史最高的漏洞赏金,55,000 美元。

研究人员获得了55,000美元的错误赏金(这是客户端帐户收购的最高支出)。

clipboard.png

你可能感兴趣的:(facebook,漏洞,安全漏洞)