<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    2022年Facebook OAuth 帳戶接管漏洞

    VSole2022-07-28 12:49:52

    聲明:文章中涉及的程序(方法)可能帶有攻擊性,僅供安全研究與教學之用,讀者將其信息做其他用途,由用戶承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。

    背景介紹:

    國外一位名叫Youssef Sammouda的白帽子于今年5月中旬公布了他在Facebook上發現的數個漏洞,利用這些漏洞組合,最終獲得了44625 美元的賞金獎勵(包含7000元鉆石聯賽獎金以及2625元賞金延遲獎金)。

    漏洞說明:

    該漏洞允許攻擊者竊取用于登錄 Facebook 的 Gmail OAuth id_token從而接管受害者的Facebook 帳戶,而發生這種情況是利用了多個漏洞,主要是 Facebook 沙箱域中的 XSS 和導致與該沙箱域共享的敏感數據漏洞。我們先來看看這幾個漏洞分別是什么。

    1、Facebook Checkpoint

    Facebook 在登錄后有額外的安全機制,負責保護和驗證用戶的真實身份,確保有效的 MFA。此外,如果你的 Facebook 帳戶因濫用或暫時被阻止而被刪除,你最終會進入這個“Checkpoint”(檢查點)。

    在此檢查過程中的某些情況下,你需要完成驗證碼以確保在正常的速率限制和嘗試次數中:


    從上圖可以看出,他們使用了Google Captcha,并將Google Captcha作為一項額外的安全功能,以避免將來自Google的第三方代碼添加到主域中,他們將 Google Captcha 包含在沙箱域中,并在將其放入 Iframe 后與主域之間建立通信。

    一切看起來似乎都OK,但這個實現中的奇怪部分是不知何種原因(可能是日志記錄)決定在檢查點與沙箱域共享當前 URL,如下所示:

    例如,當前URL為:

    https://www.facebook.com/checkpoint/CHECKPOINT_ID/?test=test

    正在加載的iframe頁面將具有這個URL:

    https://www.fbsbx.com/captcha/recaptcha/iframe/?referer=https%3A%2F%2Fwww.facebook.com%2Fcheckpoint%2FCHECKPOINT_ID%2F%3Ftest%3Dtest

    如同所見,第一個URL作為參數被包含在第二個URL中

    此外,由于處于這個Checkpoint,所以在 www.facebook.com 域中訪問的任何 URL 都會讓我們再次重定向到這個Checkpoint,然后前一個 URL 同樣被包含在下一個URL的參數中:

    1、(訪問)

    https://www.facebook.com/eg_oauth_callback_endpoint?code=code

    2、(服務器重定向) 

    https://www.facebook.com/checkpoint/CHECKPOINT_ID/?next=https%3A%2F%2Fwww.facebook.com%2Feg_oauth_callback_endpoint%3Fcode%3Dcode

    3、(內部Iframe)

    https://www.fbsbx.com/captcha/recaptcha/iframe/?referer=https://www.facebook.com/checkpoint/CHECKPOINT_ID/?next=https%3A%2F%2Fwww.facebook.com%2Feg_oauth_callback_endpoint%3Fcode%3Dcode

    那么我們便可以將在 www.facebook.com 中訪問過任何URL及泄露給 www.fbsbx.com,下一步就是想辦法把它們從沙箱域中泄露給我們,這并不困難,因為沙箱域的安全性與主域相比較而言松散了很多,我們也能從中輕易地找到 XSS。

    2、XSS in www.fbsbx.com

    白帽小哥之前就在該網站發現了XSS,因為 Facebook 實際上使用沙盒域來允許某些用戶可以上傳 HTML 文件的特定功能,即使在本次漏洞確認后,該功能仍然保持原樣。

    只需要擁有一個開發者帳戶,然后在https://developers.facebook.com/tools/playable-preview/ 使用腳本上傳 HTML 文件即可,最終文件將被上傳到 www.fbsbx.com,如下所示:

    https://www.fbsbx.com/developer/tools/playable-preview/preview-asset/?handle_str=STR

    3、退出和登錄CSRF

    由于目標 Facebook 帳戶不處于Checkpoint狀態,因此我們無法利用上述的漏洞,在這種情況下,我們可以先注銷當前用戶,并將其登錄到處于 Checkpoint 狀態的攻擊者帳戶,但如果這樣做了,我們還怎么接管他人的 Facebook 帳戶呢?

    答案是針對 Facebook 使用的第三方 OAuth,即 Gmail。如果用戶登錄到 Gmail,Gmail 會將 OAuth code/Token發送回 www.facebook.com,并且由于我們可以竊取訪問 www.facebook.com 的任何內容,于是便可以使用 Google OAuth 登錄到 Facebook與該 Gmail 帳戶相關聯的帳戶(即任何擁有 Gmail 帳戶的 Facebook 帳戶)

    4、SOP && COOP

    要竊取傳遞給 facebook 內部 iframe 的 URL,我們首先應該在兩個窗口之間建立關系:

    窗口 (1)具有如下URL

    https://www.facebook.com/checkpoint/?next=Pevious_Page_With_Gmail_Code

    的頁面,以及帶有 XSS 的

    https://www.fbsbx.com/developer/tools/playable-preview/preview-asset/?handle_str=

    頁面的窗口(2)。

    例如,我們可以從窗口 (2) 訪問 opener.frames[0] .location.href :

    –這里的Opener是窗口 (1)。

    – frames[0]是 iframe 里面有

    https://www.fbsbx.com/captcha/recaptcha/iframe/?referer=https://www.facebook.com/checkpoint/?next=Pevious_Page_With_Gmail_Code

    的頁面。

    由于frames [0] 和窗口 (2) 是同源的,所以可以讀取被盜代碼的頁面location.href。

    唯一可以防止這種情況發生的保護措施是 COOP(Cross-Origin-Opener-Policy),但它在前幾個月在 Facebook 中被大量應用。

    攻擊步驟:

    完整攻擊將通過上傳腳本傳遞到 www.fbsbx.com,通過利用步驟2中的XSS,從而執行以下步驟的代碼:

    1、退出CSRF:代碼已被原作者編輯(隱藏)

    2、登錄CSRF:代碼已被原作者編輯(隱藏)

    3、使用windows.open打開(TARGET):

    https://accounts.google.com/o/oauth2/auth?redirect_uri=https://www.facebook.com/oauth2/redirect/&response_type=permission%20code%20id_token&scope=email%20profile%20openid&client_id=15057814354 -80cg059cn49j6kmhhkjam4b00on1gb2n.apps.googleusercontent.com

    它將重定向到

    www.facebook.com/checkpoint/CHECKPOINT_ID/?next=URL_WITH_CODE 

    其中 URL_WITH_CODE 是

    www.facebook.com/oauth2/redirect/?code=Gmail_Code

    4、等待幾秒,然后訪問 TARGET.frames[0].location.href,我們就有了 Google OAuth code和 id_token,作為攻擊者,我們可以從 id_token 中提取電子郵件地址,然后在 www.facebook.com 中啟動密碼重置過程(設置正確的 sfui cookie),然后選擇連接到 Gmail(openid),我們會重定向到與第 3 步類似的 URL,但會帶有額外的狀態參數。

    我們使用上一步重定向到 accounts.google.com 中的狀態,并將其放在此處以構建最終 URL

    https://www.facebook.com/oauth2/redirect/?state=STATE&code=CODE_FROM_STEP_4

    如果我們訪問上面這個 URL,在響應包的正文中會看到一個訪問受害者帳戶的鏈接(該URL的 /recover/password/ 中包含有一個隨機數,該隨機數即為受害者帳戶)。

    漏洞時間線:

    Feb 16, 2022—?Report Sent?

    Feb 22, 2022— Acknowledged by Facebook

    Mar 21, 2022—?Fixed by Facebook

    May 14, 2022?— $44625 bounty awarded by Facebook. (7000 Diamond League Bonus, 2625 Bounty Delay Bonus)

    oauthcheckpoint
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    唯一可以防止這種情況發生的保護措施是 COOP,但它在前幾個月在 Facebook 中被大量應用。
    網絡攻擊十大目標行業:政府、通訊、銀行、IT、酒店、航空、汽車、醫療、學校、關基。
    以勒索軟件為代表的網絡威脅正從小概率事件變為時間問題,去年底的Solarwinds事件還未消退,7月初針對IT服務供應商Kayesa的供應鏈黑客攻擊又破規模之最。
    2018年1月21日,國家信息安全漏洞共享平臺(CNVD)接收了OAuth 2.0存在第三方帳號快捷登錄授權劫持漏洞(CNVD-C-2018-06621)。綜合利用上述漏洞,攻擊者可通過登錄受害者賬號,獲取存儲在第三方移動應用上的敏感信息。由于OAuth廣泛應用于微博等社交網絡服務,漏洞一旦被黑客組織利用,可能導致用戶隱私信息泄露。
    網站和應用程序用于連接到Facebook,Google,Apple,Twitter等的開放授權標準實施中的漏洞可能允許攻擊者接管用戶帳戶,訪問和/或泄露敏感信息,甚至進行金融欺詐。當用戶登錄到網站并單擊鏈接以使用另一個社交媒體帳戶登錄時,OAuth就會發揮作用,例如“使用Facebook登錄”或“使用Google登錄” - 許多網站都使用該功能允許跨平臺身份驗證。該漏洞是Salt研究人員在在線平臺實施OAuth時發現的第二個也是更具影響力的漏洞,OAuth被證明是一個難以安全實施的標準。
    前言為什么使用spring-authorization-server?真實原因:原先是因為個人原因,需要研究新版鑒權服務,看到了spring-authorization-server,使用過程中,想著能不能整合新版本cloud,因此此處先以springboot搭建spring-authorization-server,后續再替換為springcloud2021。官方原因:原先使用Spring Security OAuth,而該項目已經逐漸被淘汰,雖然網上還是有不少該方案,但秉著技術要隨時代更新,從而使用spring-authorization-serverSpring 團隊正式宣布 Spring Security OAuth 停止維護,該項目將不會再進行任何的迭代項目構建以springboot搭建spring-authorization-server數據庫相關表結構構建需要創建3張表,sql分別如下CREATE?
    谷歌OAuth Client Library for Java的設計目的是用來與web上的任意OAuth協作,而不僅僅是谷歌API。該庫基于谷歌Java HTTP客戶端庫構建,支持Java 7標準版和企業版、安卓4.0、谷歌APP引擎。
    2022年4月13日,Google修復了Google-OAuth-Java-Client中的一個身份驗證繞過漏洞。漏洞編號:CVE-2021-22573 ,漏洞威脅等級:高危,漏洞評分:8.7。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类