書名: Web漏洞搜索作者名: (美)彼得·亞沃斯基本章字數: 1291字更新時間: 2021-11-05 10:19:59
2.4 HackerOne中間網頁重定向漏洞
難度:低
URL:未公布
報告位置:https://www.hackerone.com/reports/111968/
報告日期:2016年1月20日
支付獎金:500美元
有些網站通過實現中間網頁(在用戶訪問期望的內容之前進行顯示和提醒)的方式來抵御開放式重定向漏洞。在你重定向用戶到一個URL時,可以顯示一個中間網頁,其中包含說明用戶正在離開他們所在的域的提醒信息。因此,如果重定向網頁顯示的是虛假的登錄頁面或者試圖偽裝成受信任的域,用戶都會知道他們正在被重定向。這也是HackerOne在它的大多數離開本站的URL鏈接(例如,指向已提交報告的鏈接)中所采用的辦法。
盡管你可以使用中間網頁提醒的方式避免重定向漏洞,但是網站之間交互的復雜性也能導致有些鏈接缺失保護。HackerOne使用一個客戶服務支持票務系統Zendesk來支撐它的https://support.hackerone.com/子域。以前,當你訪問具有/zendesk_session的hackerone.com時,瀏覽器會直接從HackerOne平臺重定向到HackerOne的Zendesk平臺,而不需要中間網頁提醒,因為包含hackerone.com域的URL是可信鏈接(除非你通過URL/hc/en-us/requests/new.提交請求,否則HackerOne現在會重定向https://support.hackerone.com到docs.hackerone.com)。然而,任何人都可以創建個性化的Zendesk賬號,并傳遞給/redirect_to_account?state=參數。然后個性化的Zendesk賬號可能就會重定向到其他的非Zendesk或HackerOne控制的網站。由于Zendesk允許在賬號之間重定向而不需要中間網頁提醒,因此用戶可能被重定向到一個非受信任網站而不會被進行任何提醒。為了應對這個漏洞,HackerOne將包含zendesk_session的鏈接看作外部鏈接,并且在用戶點擊鏈接時觸發中間告警網頁進行提醒。
為了驗證這個漏洞,黑客Mahmoud Jamal創建了一個具有子域http://compayn.zendesk.com的Zendesk賬號。然后他使用Zendesk主題編輯器(管理者可以通過主題編輯器定制自己的Zendesk網站的外觀)在頭文件中加上了如下JavaScript代碼:

通過使用上面的JavaScript腳本,Jamal引導瀏覽器去訪問http://evil.com。<script>標記表示HTML中的可執行代碼,document表示Zendesk返回的整個HTML文檔,其中包含了網頁的所有信息。document后面的句點和名字是它的屬性。屬性包含了描述對象或用于修改對象所需要的信息和相應的取值,因此你可以通過使用location屬性控制瀏覽器顯示的網頁,也可以通過href子屬性(這是location對象的一個屬性)來重定向瀏覽器到指定的網站。訪問如下的鏈接將會把目標對象重定向到Jamal的Zendesk子域,這將會使得目標對象的瀏覽器運行Jamal的腳本并重定向到http://evil.com:

因為鏈接包含了域hackerone.com,中間網頁不會顯示,用戶也不會知道他們訪問的網頁是不安全的。有意思的是,Jamal最初向Zendesk報告缺失中間網頁的重定向問題時,并沒有得到重視,這也沒有被作為一個漏洞進行標記。很自然地,Jamal繼續挖掘,想看一看這一漏洞還可能被怎樣利用。最后,他發現了JavaScript重定向攻擊的方式,最終獲得了HackerOne的認可并得到了一筆獎金。
要點
當你挖掘漏洞時,要關注網站使用的服務。因為每一個服務都代表新的攻擊向量。HackerOne漏洞的形成,就是因為HackerOne使用了Zendesk,并且HackerOne的所有重定向又都是被允許的。
另外,雖然你發現了漏洞,但是閱讀或響應你的報告的人可能還不能很快清楚地理解該漏洞造成的安全影響。為此,我將在第19章探討漏洞報告的相關內容,詳細描述在報告中應該囊括哪些內容,應該怎樣展示漏洞與企業的聯系,以及其他信息。如果你能夠提前做些工作,并如實、詳盡地解釋報告的安全影響,這將有助于制定出一個更為平滑的安全解決方案。
同樣地,也存在企業并不認同你的情況。如果是這樣,就像Jamal一樣繼續進行挖掘,并看是否能夠利用這個漏洞或者結合其他漏洞描述該漏洞造成的安全影響。