當前位置:
首頁 > 新聞 > Facebook CDN伺服器的XSS漏洞

Facebook CDN伺服器的XSS漏洞

前言


Facebook 和它的旗下應用 Instagram都是把照片/視頻存儲在Facebook自身的CDN伺服器 ".fbcdn.net" 或 ".cdninstagram.com" 之上,然後,再通過其各個子CDN域名網站提供針對請求的內容緩存分發服務。本文中作者分享的是一個針對Facebook CDN伺服器的XSS漏洞,利用該漏洞可以繞過鏈接中的校驗機制,任意執行JS代碼。


**

前言


Facebook存儲在CDN伺服器上的圖片和視頻,都在自身訪問鏈接中包含了一個HASH串,這個HASH串目的在於對Facebook自身存儲的圖片或視頻起到一個簽名校驗的保護作用,且其HASH串都是以像 "oh" 或 "oe" 這樣的兩個字母參數來賦值的。



https://instagram.fpnq2-1.fna.fbcdn.net/v/t51.2885-15/1249476217008321801746679131300789175210564n.jpg?nc_cat=0&oh=cb7024e12c863937b69c3d6c15589697&oe=5B31E89F


如果我們把其文件格式做個更改,如把.jpg改為.html,那麼無疑,伺服器訪問就會出錯。


所以,我一開始的想法就是,是否可以把這種鏈接中的多餘參數去掉,讓它簡化一下成為以下這樣呢:



https://instagram.fpnq2-1.fna.fbcdn.net/1249476217008321801746679131300789175210564_n.jpg


但這確實有點想當然了,請求響應是: 「Access Denied」。在經過一番研究之後,我找到了能針對所有圖片和視頻,繞過其鏈接中HASH串簽名校驗的方法,即使用戶上傳的某些圖片視頻對應的鏈接是過期「expired」狀態,我一樣可以從Facebook CDN伺服器中訪問到它們。

漏洞發現



https://instagram.fpnq2-1.fna.fbcdn.net/v/t51.2885-15/1249476217008321801746679131300789175210564n.jpg?nc_cat=0&oh=cb7024e12c863937b69c3d6c15589697&oe=5B31E89F


觀察以上URL,在其中,首先是存在一個參數"/v/",用來限制當前URL是否能訪問後續的HASH串,但是刪除 「/v/」 這個參數後仍然會返回錯誤:「Access Denied」。後來,我想如果讓它跨域訪問又如何呢,比如說,instagram.fpnq2-1.fna.fbcdn.net存在一個別名記錄(CNAME)如下:



instagram.fpnq2-1.fna.fbcdn.net. 3599 IN CNAME scontent.xx.fbcdn.net.


也就是說,如果把請求instagram.fpnq2-1.fna.fbcdn.net的圖片鏈接中的CDN伺服器換成scontent.xx.fbcdn.net,那會怎樣呢?在我簡單的看來,這兩個不同的子域名網站雖同屬一個CDN根伺服器,但這種一替換可能就不會存在一些跨域的校驗限制了。


我一試,去除 「/v/」參數,去除HASH校驗串nccat=0&oh=cb7024e12c863937b69c3d6c15589697&oe=5B31E89F之後,竟然可以訪問到目標圖片!Boom!


那麼如此說來,能不能更改訪問圖片的後綴格式了呢?比如說,我們在上傳圖片中加入一些js腳本,然後把它改為.html,不就能實現Payload執行了嗎?也或者能把上傳的圖片改為".html/.svg" 或 」.php「呢。試試看吧。


PoC

做如下測試,我們結合Burp抓包,在上傳圖片中加入一個帶XSS Payload的外鏈.js腳本,可以成功上傳到instagram.fpnq2-1.fna.fbcdn.net的伺服器上,然後,獲取到伺服器上當前上傳圖片的具體訪問鏈接,把圖片.jpg格式改為.html格式,就能成功實現js腳本中的XSS Payload運行。這裡我用到的帶XSS Payload的外鏈.js為:



https://www.amolbaikar.com/wp/js/instagram.js


也就是,提取到當前上傳到CDN伺服器中圖片的具體訪問鏈接:



https://instagram.fpnq2-1.fna.fbcdn.net/v/t51.2885-15/1249476217008321801746679131300789175210564n.jpg?nc_cat=0&oh=cb7024e12c863937b69c3d6c15589697&oe=5B31E89F


然後,把它更改為簡化後去除 「/v/」參數、去除HASH校驗串,且為instagram.fpnq2-1.fna.fbcdn.net 別名scontent.xx.fbcdn.net ,但圖片名稱 1249476217008321801746679131300789175210564_n 一樣,但把.jpg格式更改為.html格式,具體的訪問鏈接如下:



https://scontent.xx.fbcdn.net/t51.2885-15/1249476217008321801746679131300789175210564_n.html


由於其中加入了帶XSS Payload的外鏈.js,在html文件的解析執行下,可以成功觸發Payload。

總結 


由於Facebook沒有考慮「校驗簽名」繞過或其它「數據泄露」問題的嚴重性,且沒把通過CDN伺服器訪問到圖片或視頻原始鏈接的問題考慮在內,(點此參考其它分析文章),因此,造成了它本該是內部的數據,由此變成了公開的內容。


攻擊者利用該漏洞可以在Facebook CDN伺服器上執行任意JS代碼,好在有沙盒防護機制,其不能讀取用戶的cookies/session信息,但應用在實際的攻擊場景中,該漏洞可以繞過Facebook的鏈接黑名單系統 Linkshim,也能用其實施釣魚行為。


漏洞上報進程



2018.3.8: 漏洞初報


2018.3.10: 漏洞確認


2018.3.23: 漏洞修復


2018.3.28:Facebook官方$1500賞金髮放


*

參考來源:amolbaikar,clouds編譯,轉載請註明來自FreeBuf.COM

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

GDPR實施半年多,你感覺到它的存在了嗎?
BOTCHAIN:第一個基於比特幣協議的功能齊全的殭屍網路

TAG:FreeBuf |