技術編輯:徐九丨發自 Highway
SegmentFault 思否報道php
近日,一名研究人員在 Facebook 平臺上發現了一個嚴重的漏洞,該漏洞涉及登陸的 Facebook OAuth 框架,可被用來劫持用戶的 Facebook帳號。因爲發現了這個漏洞,該名研究人員得到了 Facebook 開出的帳戶劫持的單個最高漏洞獎勵 —— 55,000 美圓。跨域
發現漏洞的研究人員名字叫 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
如今,跨域通訊已經公開,而且在沒有受害者知識的狀況下,access_token 將「泄漏到任何來源」,而後攻擊者能夠設置新的電話號碼以進行恢復。 當 Facebook 最初解決此問題時,研究人員發現 OAuth 的核心終結點「 /dialog/oauth/」繼續重定向到頁面代理。代理
在收到漏洞提醒後,Facebook 提出了相應的修復措施:blog
根據 Baikar 在博客中所說,該漏洞存在了將近 9 到 10 年。最初,當 Baikar 就該漏洞與 Facebook 取得聯繫時,這家科技巨頭迅速認可了該漏洞並開發了修復程序。最終,Facebook 開發了另外一個修復程序,解決了這個已有十年曆史的漏洞。而 Baikar 也得到了 Facebook 開出的歷史最高的漏洞賞金,55,000 美圓。token
研究人員得到了55,000美圓的錯誤賞金(這是客戶端賬戶收購的最高支出)。