漏洞信息
披露者:Ron Reshef (ronr)
嚴重程度:中危
漏洞類型:Web緩存欺騙攻擊
漏洞介紹
網站通常傾向于使用Web緩存功能(例如,通過CDN,負載平衡器或簡單地通過反向代理)。目的很簡單:存儲經常檢索的文件,以減少Web服務器的延遲。
訪問諸如http://www.example.com/home.php/non-existent.css之類的URL時,瀏覽器將生成對該URL的GET請求。
服務器返回http://www.example.com/home.php的內容。但是,URL仍為http://www.example.com/home.php/non-existent.css。
HTTP標頭與訪問http://www.example.com/home.php的相同直接:相同的緩存標題和相同的內容類型(在這種情況下為text / html)。
Web緩存服務將返回的頁面保存在服務器的緩存中。
然后,攻擊者可以訪問以下網址:http : //www.example.com/home.php/non-existent.css 然后可以顯示受害者的頁面并獲取受害者的敏感信息(頁面內容)。
與網絡釣魚攻擊不同,此攻擊中的危險部分是該URL看起來一點都不可疑。它看起來像原始網站上的普通網址,因此受害者認為可以單擊該鏈接。
漏洞復現
攻擊者將以下鏈接發送給受害者:https : //open.vanillaforums.com/messages/all/non-existent.css
受害者打開鏈接,收件箱頁面將正常加載。(然后,Web緩存服務器將保存此頁面)
攻擊者打開相同的鏈接(https://open.vanillaforums.com/messages/all/non-existent.css),然后加載受害者及其所有私人競爭者的收件箱頁面。
漏洞影響
攻擊者可以獲取特定受害者的所有私人內容,而無需受害者知道。
這里我們可以分下一下漏洞的原理和漏洞的利用條件(參考freebuf)
漏洞原理
假設客戶端請求
http://www.example.com/home.php/nonexistent.css 這個URL,其中home.php是真實存在的,而nonexistent.css不存在,那WEB服務器會怎么處理呢?針對這種情況的處理跟WEB服務器用的技術以及配置相關,有的會返回404 not found,有的會返回200 OK,然后把home.php返回回來。如果服務器返回200 OK就要注意了,這時緩存服務器拿到的請求是
http://www.example.com/home.php/nonexistent.css,是一個靜態頁面,而WEB服務器返回給緩存服務器的結果是http://www.example.com/home.php,不是一個靜態頁面,但是緩存服務器并不知道。
漏洞利用條件
1. WEB服務器會將類似
http://www.example.com/home.php/nonexistent.css這種頁面解析為home.php
2.緩存服務器會無視http header,只根據文件后綴來判斷是否緩存該文件
3.受害者訪問該頁面時必須已登錄
多數情況下這個是可以通過配置避免的,所以有些人認為這不算是個漏洞,所以也并沒有什么補丁來解決這個問題,估計這個問題在很多地方都存在。
防御建議
1.配置緩存服務器根據http header來判斷是否緩存頁面;
2.將所有靜態文件放在指定的目錄,只緩存這個目錄里的文件;
3.配置WEB服務器在解析類似http://www.example.com/home.php/nonexistent.css 這種頁面時返回404或者302。
復現相關教程
Omer Gil創新地顛覆了WEB緩存欺騙利用方式,通過控制 Web 緩存可以保存其它用戶的敏感數據,并成功在 Paypal 中實現了攻擊復現
http://omergil.blogspot.com/2017/02/web-cache-deception-attack.html
翻譯自hackerone
> 免責申明:本文由互聯網整理翻譯而來,僅供個人學習參考,如有侵權,請聯系我們,告知刪除。