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

clipboard.png

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

近日,一名研究人员在 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,获取相关交互服务和第三方网站的访问控制权。post

Baikar 在解释正常的登陆流程时表示:网站

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

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

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

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

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

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

Facebook 开出历史最高赏金

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

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

clipboard.png

相关文章
相关标签/搜索