新型Web攻击技术——Web缓存欺骗

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 本文讲的是新型Web攻击技术——Web缓存欺骗,Web缓存欺骗是一种新的Web攻击向量,这种攻击技术的出现使得多种Web缓存技术和框架面临风险。
本文讲的是 新型Web攻击技术——Web缓存欺骗Web缓存欺骗是一种新的Web攻击向量,这种攻击技术的出现使得多种Web缓存技术和框架面临风险。

Web缓存和服务器反应的一点介绍

很多网站通常都倾向于使用web缓存功能(例如通过CDN,负载均衡器或简单的反向代理)。使用Web缓存功能的目的很简单:存储那些经常检索的文件,以减少Web服务器响应的延迟。

让我们来看一个网络缓存的例子。网站http://www.example.com通过配置了反向代理作为Web缓存。存储在服务器上并需要返回用户个人内容(如http://www.example.com/home.php)的动态网页必须要按不同的用户动态的创建,因为每个用户的数据是不同的。这种数据,或至少其个性化的这一部分,是不会被缓存的。

更合理及常见的缓存内容都是静态或公共文件:样式表(css),脚本(js),文本文件(txt),图像(png,bmp,gif) 等,在大多数人的正常意识中,这些文件通常不会包含用户的任何敏感信息。此外,在那些关于Web缓存配置的各种最佳实践的文章中,都会这样说:“建议缓存所有公开的静态文件并忽略其HTTP缓存头信息”。

2.网络缓存欺骗攻击依赖于浏览器和网络服务器的反应,与RPO攻击很相似,下面两篇文章对RPO攻击做了一些解释。

http://www.thespanner.co.uk/2014/03/21/rpo/
http://blog.innerht.ml/rpo-gadgets/

那么访问了像http://www.example.com/home.php/non-existent.css这样的网址时会发生什么?(译者注:也就是在http://www.example.com/home.php后面加上缓存的文件类型,文件名可以是不存在的)

浏览器会发出对该网址的GET请求。有趣的是服务器的反应 —— 服务器会如何解释请求的URL?根据服务器的Web缓存技术和配置(对于不同的服务器,URL的结构可能略有不同),服务器返回了http://www.example.com/home.php的内容。是的,浏览器地址栏的网址仍然为http://www.example.com/home.php/non-existent.css。HTTP标头信息与直接访问http://www.example.com/home.php的标头信息相同:缓存标头信息和内容类型相同(在这种情况下为text / html)。

如果我们访问http://www.example.com/home.php/non-existent.css,会发生什么情况,注意,在代理服务器上已经设置了对静态文件进行网络缓存。服务器会忽略此类文件的缓存头?让我们来分析一下这个过程:

1. 浏览器请求http://www.example.com/home.php/non-existent.css。
2. 服务器返回http://www.example.com/home.php的内容,很可能使用了标识不缓存此页面的HTTP缓存标头。
3. 通过代理服务器响应该请求。
4. 代理服务器发现该文件的扩展名是css。
5. 在缓存目录下,代理服务器会创建一个名为home.php的目录,并缓存冒名顶替的“CSS”文件(不存在的css文件)。

Oh!

新型Web攻击技术Web缓存欺骗

漏洞利用

如果攻击者诱骗已登录的用户访问http://www.example.com/home.php/logo.png,则该网页(包含用户个人信息的网页)将被缓存到缓存服务器上,因此这些被缓存的个人信息就可以公开访问。 如果响应的HTTP主体信息中包含(由于某种原因)了会话标识符,安全密保问题或CSRF令牌,则可能变得更糟。 在这种时候,所有的攻击者都会自己访问缓存页面然后公开这些被缓存的用户隐私数据。

新型Web攻击技术Web缓存欺骗

一件有趣儿的小事

通常,不需要进行身份验证即可访问网站缓存的公共静态文件。因此,缓存的文件是公共的且可访问的 ——不需要身份验证。

条件

因此,基本上,需要两个条件来确认网站是否存在此漏洞:

1. Web缓存功能是通过判断Web应用程序URL文件的扩展名来决定是否进行高速缓存,而且忽略了HTTP中的任何缓存头标识信息。
2. 访问http://www.example.com/home.php/non-existent.css等网页时,网络服务器将返回“home.php”的网址的内容。

缓解措施

1.  将缓存文件的缓存机制配置为仅当缓存文件的HTTP缓存标头允许时才进行缓存。这是解决这个问题的根本的解决办法。

2.  如果缓存组件提供Content-Type选项的话,请将缓存组件配置为按文件的内容类型进行缓存。

3.  配置Web服务器,以便对于像http://www.example.com/home.php/non-existent.css之类的页面,Web服务器不会返回带有 “home.php” 的URL的内容。相反的,服务器应该用404或302来响应这些URL的请求。

PayPal 网站中的Web缓存欺骗——漏洞披露

PayPal很容易受到网络缓存欺骗攻击。目前该漏洞现已修复,并已公开披露。

利用此漏洞可能泄漏的用户信息:

用户的名字和姓氏
账户余额
最后四个信用卡数字
交易数据
护照号码
电子邮件地址
家庭地址
电话号码
漏洞页面中包含的任何其他信息

一些漏洞页面的示例:

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

下面是可用于在PayPal网站上缓存页面的各种静态文件扩展名(超过40个):

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个小时。如果在该期间再次访问,则会延长过期时间。很明显,这么长的时间段足以让攻击者在缓存文件过期之前“捕获”到缓存文件,并且通过不断地监视此URL,获取他可以在创建缓存文件时要公开的用户隐私信息。

Demo视频

主页:https://www.paypal.com/myaccount/home

Paypal主页的Web缓存欺骗攻击Demo视频:https://youtu.be/pLte7SomUB8

个人设置页面:https://www.paypal.com/myaccount/settings

Paypal个人设置页面的Web缓存欺骗攻击Demo视频:https://youtu.be/e_jYtALsqFs

历史页面:https://history.paypal.com/cgi-bin/webscr?cmd=_history-details

Paypal历史页面的Web缓存欺骗攻击Demo视频:https://youtu.be/dgZVe7D8SRE

在我报告了此漏洞后,PayPal奖励了我3,000美刀,;)。

通过Web缓存欺骗技术劫持用户

我在其他应用程序中也发现了此漏洞,不过不幸的是,由于一些原因,我不能向公众公开(更糟的是,还有一些不错的Demo视频)。在这些应用程序中,可以完全控制应用程序的用户。这完全是有可能的,因为恢复用户密码的会话ID或安全密保问题的答案包含在了易受攻击的网页的HTML代码中。非常感谢Sagi Cohen的帮助。

IIS演示视频

在下面的视频中,网站托管在了IIS负载均衡器后面的两个Web服务器上,并安装了应用程序请求路由(ARR)。

成功登录的用户将被重定向到“welcome.php”的页面,其中包含其个人信息内容。负载均衡器配置为对所有的CSS文件进行缓存,并忽略这类文件的HTTP缓存头。

已登录的用户在访问http://www.sampleapp.com/welcome.php/stylesheet.css时,IIS负载均衡器会将“welcome.php”页面引用为一个目录,并在缓存目录中创建它,然后缓存“welcome.php”的内容,其中包含了用户的隐私内容信息,缓存的文件名为'stylesheet.css'。




原文发布时间为:2017年3月2日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
1天前
|
安全 JavaScript Java
后端技术在现代Web开发中的实践与挑战
本文旨在探讨后端技术在现代Web开发中的关键作用,分析其在数据处理、业务逻辑实现和系统安全等方面的重要性。通过阐述常见的后端技术和框架,如Node.js、Django和Spring Boot,展示它们在实际项目中的应用。同时,文章将讨论后端开发所面临的主要挑战,包括性能优化、扩展性和维护性问题,以及如何应对这些挑战。最终,通过对实际案例的分析,总结出一套行之有效的后端开发最佳实践,为开发者提供参考。
12 5
|
1天前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
|
12天前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
39 7
|
11天前
|
存储 缓存 前端开发
缓存技术在软件开发中的应用与优化策略
缓存技术在软件开发中的应用与优化策略
|
8天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
24 0
|
14天前
|
Java Maven Apache
Struts 2 配置不再难!跟着这篇详解从零搭建开发环境
【8月更文挑战第31天】要搭建Struts 2开发环境,需先安装JDK,然后下载并解压Struts 2二进制包,将其核心库`struts2-core`添加到项目类路径中。使用Maven或Gradle时,可在配置文件中添加依赖。接着,在`web.xml`中配置Struts 2过滤器及其映射。`struts.xml`通常位于`src/main/resources`目录下,用于定义动作映射和拦截器等核心配置。最后,通过配置类路径下的`log4j.properties`文件,可以设置Struts 2的日志记录级别及输出方式。完成以上步骤后,即可开始基于Struts 2框架进行Web应用开发。
34 0
|
14天前
|
前端开发 Java UED
告别页面刷新时代:Struts 2 Ajax技术揭秘,轻松实现动态加载,Web应用焕然一新!
【8月更文挑战第31天】在Web应用开发中,用户体验至关重要。为减少页面刷新带来的不适,Ajax技术应运而生。Struts 2作为流行的Java EE框架,通过内置的Ajax支持简化了无刷新页面动态加载的实现。本文通过对比传统请求响应模式,展示了Struts 2如何轻松实现Ajax功能,提升了用户体验和开发效率,并灵活地实现了数据交换。然而,使用Ajax时还需注意SEO和跨域请求等局限性。
26 0
|
14天前
|
开发者 安全 SQL
JSF安全卫士:打造铜墙铁壁,抵御Web攻击的钢铁防线!
【8月更文挑战第31天】在构建Web应用时,安全性至关重要。JavaServer Faces (JSF)作为流行的Java Web框架,需防范如XSS、CSRF及SQL注入等攻击。本文详细介绍了如何在JSF应用中实施安全措施,包括严格验证用户输入、使用安全编码实践、实施内容安全策略(CSP)及使用CSRF tokens等。通过示例代码和最佳实践,帮助开发者构建更安全的应用,保护用户数据和系统资源。
27 0
|
14天前
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
22 0
|
14天前
|
开发者 前端开发 Apache
【绝不错过!】揭秘Wicket大神级插件,带你飞越编程极限,探索Web应用开发新大陆!
【8月更文挑战第31天】Apache Wicket是一个成熟的Java Web框架,以其组件化体系结构、直观的API及对MVC的支持著称。其活跃社区贡献了大量插件和扩展,显著提升了Wicket的功能性。本文推荐几个实用插件,如**Wicket Ajax Support**,可轻松添加Ajax功能,提升用户体验;**Bootstrap for Wicket**则将Bootstrap与Wicket结合,美化应用界面。
25 0