官术网_书友最值得收藏!

3.1 Facebook OAuth漏洞

2020年3月1日,漏洞賞金獵人Amol Baikar在其博客公布了一個Facebook OAuth框架權(quán)限繞過的漏洞。

3.1.1 OAuth漏洞基本信息

關(guān)于Facebook OAuth漏洞,作者聲稱獲取了賞金55000美元,按照當(dāng)日的美元匯率計算,獎金金額達(dá)38萬元人民幣之多。那么這個漏洞是如何形成的呢?下面就帶著讀者來一探究竟。

漏洞類型:API2-失效的用戶認(rèn)證。

漏洞難度:高。

報告日期:2019-12-16。

信息來源:https://www.amolbaikar.com/facebook-oauth-framework-vulnerability。

Facebook登錄功能遵循OAuth 2.0授權(quán)協(xié)議,第三方網(wǎng)站(Instagram、Oculus、Netflix等)使用Facebook賬號認(rèn)證通過后獲取訪問令牌access_token來訪問獲得用戶授權(quán)許可的資源信息。惡意攻擊者通過技術(shù)手段劫持OAuth授權(quán)流程,竊取應(yīng)用程序的access_token,從而達(dá)到接管用戶賬號的目的。其攻擊過程如圖3-1所示。

●圖3-1 Facebook OAuth繞過漏洞攻擊示意圖

3.1.2 OAuth漏洞利用過程

Facebook網(wǎng)站和國內(nèi)的社交應(yīng)用騰訊、微信、微博一樣,提供第三方集成授權(quán)功能。正常情況下,F(xiàn)acebook第三方應(yīng)用OAuth授權(quán)流程中,其中獲取用戶訪問令牌access_token的URL請求格式如下:

上述URL鏈接中,參數(shù)APP_ID為第三方應(yīng)用在Facebook注冊時生成的應(yīng)用ID值,/connect/ping為Facebook提供給第三方應(yīng)用獲取用戶訪問令牌access_token的API端點(diǎn),這是在大多數(shù)互聯(lián)網(wǎng)平臺OAuth認(rèn)證時都需要提供的功能。Facebook為開發(fā)者提供JavaScript SDK作為接入方式,接入時,開發(fā)者通過編碼在后臺創(chuàng)建跨域通信的代理iframe,再使用window.postMessage() 收發(fā)令牌。

模擬攻擊者在測試中發(fā)現(xiàn),此鏈接中跳轉(zhuǎn)地址xd_arbiter.php?v=42的值可以被篡改,可以通過篡改來添加更多路徑和參數(shù),比如修改為xd_arbiter/?v=42,而且xd_arbiter也是請求的白名單路徑。通過這樣的方式,可以獲取訪問令牌的hash值。但若想獲取可讀寫的訪問令牌值,最好是借助于postMessage()將消息傳送出來。而恰好在staticxx.facebook.com域名下,存在了提供上述代碼功能的JavaScript文件,于是模擬攻擊者利用了這個鏈接構(gòu)造出登錄的URL。原鏈接如下:

構(gòu)造出來的登錄鏈接格式如下所示(其中124024574287414是instagram的app_id):

最后,Amol Baikar定制了Facebook JavaScript SDK,其關(guān)鍵代碼如下:

運(yùn)行之后,可以在受害者不知情的情況下獲取access_token。漏洞在上報后,很快得到了Facebook的響應(yīng),并修復(fù)了漏洞。

3.1.3 OAuth漏洞啟示

下面再來回顧一下整個攻擊過程,如圖3-2所示。

●圖3-2 OAuth繞過攻擊過程

在此次攻擊成功的路徑上,可修改xd_arbiter是第一個關(guān)鍵點(diǎn),提供代理劫持框架的7SWBAvHenEn.js是第二個關(guān)鍵點(diǎn)。有了第一個關(guān)鍵點(diǎn),攻擊者才能偽造可執(zhí)行路徑,將7SWBAvHenEn.js加入進(jìn)來。7SWBAvHenEn.js文件在攻擊中充當(dāng)了攻擊武器,本來有第一個關(guān)鍵點(diǎn)攻擊者即可找到攻擊方向,但炮彈精準(zhǔn)度不足,7SWBAvHenEn.js文件所提供的功能加速了攻擊者完成攻擊的速度。同時,在網(wǎng)媒報道中,也提到了“即使用戶更改了Facebook賬號密碼,令牌仍然有效”,這是導(dǎo)致賬號權(quán)限被接管的主要原因。

作為防守方,如果僅僅使用URL白名單來防御往往是不夠的。尤其是復(fù)雜的應(yīng)用程序中,在面對跨域通信,PC端、手機(jī)端、移動平板等不同類型設(shè)備的多端接入提供多個接入點(diǎn)的情況下。而且還要考慮不同瀏覽器、同一瀏覽器不同版本的復(fù)雜情況下,即使使用X-Frame-Options來防止跨域但也要考慮其兼容性問題。通過這個案例,也給開發(fā)人員提了個醒。在做某個程序設(shè)計時,在實現(xiàn)功能的前提下,盡可能遵循簡單原則,參考標(biāo)準(zhǔn)的協(xié)議實現(xiàn)流程。對線上環(huán)境中不使用的文件,盡快清除。

主站蜘蛛池模板: 土默特左旗| 惠州市| 大连市| 麟游县| 化隆| 巴彦淖尔市| 南昌市| 桐柏县| 荥阳市| 东莞市| 胶州市| 平遥县| 前郭尔| 临洮县| 龙川县| 财经| 射洪县| 襄樊市| 南涧| 永德县| 文登市| 高清| 洪雅县| 准格尔旗| 深水埗区| 英德市| 甘孜| 柞水县| 广宁县| 师宗县| 鞍山市| 东乌珠穆沁旗| 新河县| 体育| 元氏县| 嘉兴市| 福州市| 韶关市| 江川县| 仪陇县| 全椒县|