- API安全技術(shù)與實戰(zhàn)
- 錢君生 楊明 韋巍編著
- 1193字
- 2021-07-08 11:51:11
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)境中不使用的文件,盡快清除。
- 電子支付的規(guī)制結(jié)構(gòu)配置研究
- 解密數(shù)據(jù)恢復(fù)
- 網(wǎng)絡(luò)安全大數(shù)據(jù)分析與實戰(zhàn)
- 網(wǎng)絡(luò)關(guān)鍵設(shè)備安全檢測實施指南
- CTF快速上手:PicoCTF真題解析(Web篇)
- 網(wǎng)絡(luò)空間安全:拒絕服務(wù)攻擊檢測與防御
- 計算機(jī)網(wǎng)絡(luò)安全實驗指導(dǎo)
- Kali Linux無線網(wǎng)絡(luò)滲透測試詳解
- 一本書讀透金融科技安全
- 社會工程:防范釣魚欺詐(卷3)
- Instant OSSEC Host-based Intrusion Detection System
- 動態(tài)賦能網(wǎng)絡(luò)空間防御
- 極限黑客攻防:CTF賽題揭秘
- 網(wǎng)絡(luò)空間安全實踐能力分級培養(yǎng)(I)
- AI+網(wǎng)絡(luò)安全:智網(wǎng)融合空間體系建設(shè)指南