Web缓存欺骗是一种新的攻击方式,危害范围可扩大至各种技术及框架。
本文仅分享Web缓存攻击知识,不承担任何由于传播、利用本文所发布内容而造成的任何后果及法律责任。
缓存的意义在于实现资源的快速访问,在Web程序中就使用了网络缓存功能,如CDN、负载均衡器及反向代理。
为了实现快速访问,同时保证数据安全,可将一些静态的、公共的、不敏感的文件缓存在服务器,而一些动态的、敏感的文件则不应缓存。
攻击前提:代理服务器可以进行静态文件的缓存,但对文件的缓存头部置之不理,且服务器能返回错误请求中有效路径的文件内容。
举个例子:当请求http://www.ice.com/ice.php/AAAA.txt
时,由于AAA.txt并不存在,服务器提取http://www.ice.com/ice.php/
的内容,并将其作为HTTP缓存发送给代理服务器,在这个缓存的HTTP头部中,可能指示代理服务器不可缓存/AAAA.txt页面。
但由于代理服务器对文件的缓存头部置之不理,而且通过文件拓展名判断出AAA.txt文件为静态文件,导致代理服务器缓存该页面,于是,代理服务器将创建一个名为ice.php的目录(如果没有),并在该目录下缓存AAA.txt,其内容为HTTP缓存。
也就是说,我们访问http://www.ice.com/ice.php/
返回的HTTP头部与访问http://www.ice.com/ice.php/AAAA.txt
返回的HTTP头部是相同的,具有相同的缓存头部及内容类型。
总结来说,即使服务器返回了不可缓存该页面的头部指令,但代理服务器仍然可以绕过该指令,同时如果该不存在的文件的拓展名被检测为静态文件,就将该文件缓存到合适的目录下。这将导致客户端在请求时错误地获取了伪装的文件,同时该文件无法更新。
利用此漏洞,即利用服务器对于请求 URL 的解析方式,从而绕过了文件的实际存在性检查,就能够在访问一个不存在的文件时得到有效路径的内容,而这就是Web缓存攻击。
已知:ChatGPT用户的账户信息页面为https://chat.openai.com/api/auth/session:
引导已登录的用户ice请求https://chat.openai.com/api/auth/session/victim.css
,此时回显在ice眼前的仍然是自己的账户信息页面,但其账户信息已被服务器存储在https://chat.openai.com/api/auth/session/victim.css
中。
由于/victim.css被服务器缓存,谁都可以轻松查看ice的会话数据,而不会受到任何阻碍或困难,任何人访问https://chat.openai.com/api/auth/session/victim.css
即可得到ice的账户信息:
可以看到上图中含有令牌等敏感数据,通过利用令牌等即可实现账户接管。
经测试,可缓存在 PayPal 上的各种静态文件扩展名有:
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
因此我们可以构造形如:https://www.paypal.com/myaccount/home/ice.css
的链接,从而实现缓存攻击。
同时,经测试可知缓存文件过期所需的时间为5小时,再次访问则会增加延长时间,故信息捕获的难度不大。
实战案例:
当一个已登录的用户Omer访问https://www.paypal.com/myaccount/home/malicious3.css
时,回显的内容其实是https://www.paypal.com/myaccount/home/
(即个人主页面):
此时个人信息已被缓存至/malicious3.css。
用户ice访问https://www.paypal.com/myaccount/home/malicious3.css
即可得到Omer的隐私信息:
解决措施如下:
1)从问题根源解决:配置缓存机制,只有当文件的 HTTP 缓存头允许缓存时才进行缓存。
2)如果缓存组件提供了选项,则配置它按其内容类型缓存文件。
3)配置Web服务器,使其对于诸如http://www.ice.com/ice.php/AAA.txt
这样的页面,不返回具有该URL的ice.php的内容。相反,应响应404或302。
设有一个网站托管在两台Web服务器上,这两台服务器位于一个安装了 IIS 负载均衡器和 Application Request Routing (ARR) 的中间。成功登录后,用户将被重定向到包含其个人内容的"welcome.php"页面。负载均衡器被配置为缓存所有CSS文件,并忽略它们的缓存头部。
举例如下:
有一个经过身份验证的用户admin:
当admin访问http://www.sampleapp.com/welcome.php/stylesheet.css
时,回显仍为welcome.php所示界面:
此时IIS负载均衡器已将"welcome.php"页面视为一个目录,在缓存目录中创建该目录,并缓存了包含用户私人内容的 “stylsheet.css”:
此时任何一人访问http://www.sampleapp.com/welcome.php/stylesheet.css
都将导致admin的信息被泄露:
解决措施如下:
1)配置 IIS 负载均衡器,使其正确处理非存在的资源请求,并返回适当的错误响应。
2)检查和更新负载均衡器的缓存配置,确保只缓存适当的静态资源,而不是包含用户私人内容的敏感文件。
3)定期审查和更新服务器和负载均衡器的安全配置,以确保应用程序的安全性。
参考链接:
https://www.darkrelay.com/post/account-takeover-vulnerability-in-chatgpt
http://omergil.blogspot.com/2017/02/web-cache-deception-attack.html