不知你是否曾經閃現過一個想法,當我們訪問https://www.paypal.com/myaccount/home/stylesheet.css,或者https://www.paypal.com/myaccount/settings/notifications/logo.png?www.myhack58.com可能暴露敏感數據,甚至攻擊者能控制我們的賬戶。binggo!你要是有過這個想法就對了,Web cache欺騙就是這種情形下的一種攻擊向量。
漏洞背景介紹
網站通常都會通過如CDN、負載均衡器、或者反向代理來實現Web緩存功能。通過緩存頻繁訪問的文件,降低服務器響應延遲。例如,網站“htttp://www.examplecom ”配置了反向代理。對于那些包含用戶個人信息的頁面,如“http://www.example.com/home.php”,由于每個用戶返回的內容有所不同,因此這類頁面通常是動態生成,并不會在緩存服務器中進行緩存。通常緩存的主要是可公開訪問的靜態文件,如css文件、js文件、txt文件、圖片等等。此外,很多最佳實踐類的文章也建議,對于那些能公開訪問的靜態文件進行緩存,并且忽略HTTP緩存頭。
Web cache攻擊類似于RPO相對路徑重寫攻擊(link1,link2),都依賴于瀏覽器與服務器對URL的解析方式。當訪問不存在的URL時,如“http://www.example.com/home.php/non-existent.css? ”,瀏覽器發送get請求,依賴于使用的技術與配置,服務器返回了頁面“http://www.example.com/home.php ”的內容,同時URL地址任然是“http://www.example.com/home.php/non-existent.css”,http頭的內容也與直接訪問“http://www.example.com/home.php ”相同,cacheing header、content-type(此處為text/html)也相同。
漏洞成因
當代理服務器設置為緩存靜態文件并忽略這類文件的caching header時,訪問“http://www.example.com/home.php/no-existent.css ”時,會發生什么呢?整個響應流程如下:
1.瀏覽器請求http://www.example.com/home.php/no-existent.css ;
2.服務器返回http://www.example.com/home.php 的內容(通常來說不會緩存該頁面);
3.響應經過代理服務器;
4.代理識別該文件有css后綴;
5.在緩存目錄下,代理服務器創建目錄home.php,將返回的內容作為non-existent.css保存。
漏洞利用
攻擊者欺騙用戶訪問“http://www.example.com/home.php/logo.png?www.myhack58.com ”,導致含有用戶個人信息的頁面被緩存,從而能被公開訪問到。更嚴重的情況下,如果返回的內容包含session標識、安全問題的答案,或者Csrf token。這樣攻擊者能接著獲得這些信息,因為通常而言大部分網站靜態資源都是公開可訪問的。整個流程如圖1所示:

圖1 web cache漏洞利用
漏洞存在的條件
漏洞要存在,至少需要滿足下面兩個條件:①web cache功能根據擴展進行保存,并忽略caching header;②當訪問如“http://www.examplecom/home.php/non-existent.css”不存在的頁面,會返回“home.php”的內容。
漏洞防御
防御措施主要包括3點:①設置緩存機制,僅僅緩存http caching header允許的文件,這能從根本上杜絕該問題;②如果緩存組件提供選項,設置為根據content-type進行緩存;③訪問“http://www.example.com/home.php/non-existent.css”這類不存在頁面,不返回“home.php”的內容,而返回404或者302。
Web Cache欺騙攻擊實例Paypal
Paypal在未修復之前,通過該攻擊,可以獲取的信息包括:用戶姓名、賬戶金額、信用卡的最后4位數、交易數據、emaill地址等信息。
受該攻擊的部分頁面包括:“https://www.paypal.com/myaccount/home/attack.css ”、“https://www.paypal.com/myaccount/settings/notifications/attack.css ”、“https://history.paypal.com/cgi-bin/webscr/attack.css?cmd=_history-details ”。
可以緩存頁面的靜態文件后綴如下:aif、aiff、au、avi、bin、bmp、cab、carb、cct、cdf、class、css、doc、dcr、dtd、gcf、gff、gif、grv、hdml、hqx、ico、ini、jpeg、jpg、js、mov、mp3、nc、pct、ppc、pws、swa、swf、txt、vbs、w32、wav、wbmp、wml、wmlc、wmls、wmlsc、xsd、zip。
緩存有效期:經過測試,一旦文件被訪問,它就會被緩存大約5小時。如果這之間該文件又被訪問,則有效期延長。
Paypal訪問頁面與對應視頻:
https://www.paypal.com/myaccount/home
https://www.paypal.com/myaccount/settings
https://history.paypal.com/cgi-bin/webscr?cmd=_history-details
測試網站使用了IIS負載均衡器。登錄后,會重定向到“welcome.php”頁面,該頁面包含 了用戶信息,而負載均衡器設置為緩存所有css文件,并忽略其caching header。當登錄用戶訪問“http://wwwsampleapp.com/welcome.php/stylesheetcss ”,負載均衡器創建目錄welcome.php,并保存為stylsheet.css。
|