一個網站圖標引發的血案!繞過同源策略,判斷你是否登錄了某網站
前言
我要告訴大家的是,在沒有得到你同意的情況下,目前大多數主流的網絡平臺都會泄漏你的登錄狀態。無論你當前是否進行了登錄操作,攻擊者都可以檢測到你電腦登錄了那些網絡平臺。而且目前有很多平臺可以提供人口統計以及個性分析之類的服務,所以攻擊者也可以就此推測出你的人物特性。
演示站點:【點我訪問】
技術分析
對於絕大多數的平臺而言,它們都可以利用登錄機制來檢測用戶是否登錄了自己的網絡服務。雖然這個漏洞已經存在多年了,而且這也是一個眾所周知的漏洞,但是目前大多數公司似乎並不打算去修復它。
需要註意的是,這個漏洞的利用方法非常簡單,而且修復這個漏洞也十分容易。接下來,我會以facebook.com為例子來給大家介紹這項技術的工作原理。
登錄重定向機制是如何工作的?
首先,我們要了解什麽是登錄重定向機制。假設你已經登錄並正在訪問https://www.facebook.com/bookmarks/pages這個頁面。
現在,在一個單獨的網頁標簽中訪問這個URL地址,此時你在這個網頁標簽中並沒有進行登錄操作,因此你會被下面這個URL地址重定向至網站服務的登錄頁面:
https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages
請註意上述URL地址中的next參數,該參數的值如下:
https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages
我們就是從該參數中的這個地址跳轉過來的,當我們完成了登錄操作之後,上面的這個URL會將我們重定向至之前我們所要訪問的那個頁面。
如果我們現在已經登錄了,那麽在一個新的瀏覽器頁面標簽下訪問這個URL地址(https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages),那麽瀏覽器會直接將我們定向至這個頁面。所以我們可以得出結論:
1. 如果你已經登錄了:URL將返回next參數中的地址;
2. 如果你沒有登錄:URL將返回網站服務的登錄頁面;
繞過同源策略
這個URL地址有什麽用呢?同源策略可以防止我們從除了https://facebook.com之外的其他域讀取這個請求所返回的結果。
同源策略對於HTML頁面來說是非常嚴格的,但是它允許我們從其他域接收圖片資源。所以,如果next參數中的資源是圖片資源的話,我們就可以從自己的網站來讀取這部分數據了。Facebook只會檢測URL地址中next參數的值是否以https://facebook.com開頭,所以我們只需要在Facebook的網站中找一張圖片文件就可以了。這應該沒什麽困難吧?其實,這確實有點難!因為Facebook網站中的圖片全部托管在域名fbcdn.net。但是還有一張圖片幾乎是所有Web服務器中都會有的,那就是favicon.ico!
下面給出的就是將網站圖標作為next參數時的URL地址:
https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico
這是一個非常有意思的URL地址:
1. 如果你已經登錄了:URL將返回網站圖標;
2. 如果你沒有登錄:URL將返回網站服務的登錄頁面;
我們可以在自己網站中的某個<img>標簽內使用這個URL地址:
<imgsrc="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">
這個<img>標簽的屬性如下:
1. 如果你已經登錄了:你將會接收到網站圖標,HTML頁面會自動加載這個圖片資源,並自動觸發onLoad回調事件;
2. 如果你沒有登錄:你將會接收到網站的登錄頁面,圖標資源會加載失敗,並自動觸發onError回調事件;
最終的漏洞利用代碼如下所示:
<img onload="alert(‘logged in to fb‘)"onerror="alert(‘not logged in to fb‘)"src="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">
其他平臺
這項技術適用於目前絕大多數主流的網絡平臺,因為很多服務提供商在他們的登錄地址中都添加了重定向參數,而且他們也需要在主機中托管網站的圖標資源。
更新信息
2016/10/07:Instagram移除了網站根目錄下的圖標文件,並將其轉移至了他們的CDN中。
2016/10/14:Stackoverflow已經修復了這個問題。
2016/10/14:火狐瀏覽器似乎也修復了這個問題。因為當我們使用新版火狐瀏覽器訪問測試頁面時,我們接收到了如下圖所示的錯誤信息:
2016/10/14:Netflix通過將頁面重定向至網站主頁面以修復這個問題。
這項技術的可利用性和緩解方案
攻擊者還可以在去匿名化技術、點擊劫持攻擊和網絡釣魚攻擊中使用這項技術。這樣一來,將會給用戶帶來更大的損失。
因此,為了緩解這個問題所帶來的影響,首先就是要禁用所有的第三方cookie。除此之外,你也可以安裝類似Privacy Badger和uMatrix這樣的瀏覽器插件來保護你免受此類攻擊。
總結
如果你發現還有其他的網站有可能受到這種攻擊技術的影響,請你趕快將它們公布出來。我們要向這些平臺施加壓力,如果這個問題越來越嚴重,而且越來越多的網站會受此影響的話,也許有一天他們會去修復這個問題的。一個網站圖標引發的血案!繞過同源策略,判斷你是否登錄了某網站