【网络安全】Web缓存欺骗攻击原理及攻防实战

2024-01-12

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帐户接管漏洞

已知: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缓存攻击

经测试,可缓存在 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。

实例三、IIS攻击

设有一个网站托管在两台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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【网络安全】Web缓存欺骗攻击原理及攻防实战 的相关文章

随机推荐