Spring是一个Java/Java EE/.NET的分层应用程序框架。 Spring Framework 存在反射型文件下载漏洞 。 此漏洞由于Spring Framework并没有对filename传入的文件名进行严格的安全检测,攻击者可以通过截断的方式控制filename变量值,下载任意格式的文件。
漏洞名称:Spring Framework 反射型文件下载漏洞CVE-2020-5398
Spring Framework 5.2.0 - 5.2.2
Spring Framework 5.1.0 - 5.1.12
Spring Framework 5.0.0 - 5.0.15
漏洞类型:反射型文件下载
Spring是一个Java/Java EE/.NET的分层应用程序框架。它是一个基于IOC和AOP构架多层J2EE系统的开源框架,模块化好且实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口。此外它采用的IOC可以很容易的实现Bean的装配,提供的AOP简洁易用并据此实现了Transaction Management等功能。Spring 提供简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量属性文件和帮助类。目前此框架的使用非常活跃。
此漏洞由于Spring Framework并没有对filename传入的文件名进行严格的安全检测,攻击者可以通过截断的方式控制filename变量值,下载任意格式的文件。
漏洞点存在于ContentDisposition.java 中,SpringFramework对于响应包中http头部的Content-Disposition字段没有严格的检测。漏洞修复补丁如下图:
旧版本对于filename变量的处理只是简单的通过双引号分割的方式获取用户传入的filename变量值,攻击者可以通过构造闭合双引号的方式,截断双引号后面的字符串,从而达到控制文件名的目的。新版本中添加escapeQuotationsInFilename方法限制了filename中双引号的危害,escapeQuotationsInFilename方法会将filename中的字符串逐一检测,如果存在双引号,则用注释符注释双引号,从而破坏了双引号的功能。
搭建SpringFramework5.2.2漏洞环境,直接在浏览器中进行get请求,在filename中传入精心构造的参数,效果如下:
目前受影响的Spring Framework版本:
Spring Framework 5.2.0 - 5.2.2
Spring Framework 5.1.0 - 5.1.12
Spring Framework 5.0.0 - 5.0.15
官方发布的最新版本已经修复了此漏洞,请受影响的用户下载最新版本防御此漏洞。
下载链接:https://github.com/spring-projects/spring-framework
2020/1/16
Spring官方团队在安全更新中披露了一则Spring Framework反射型文件下载漏洞CVE-2020-5398。
2020/2/7
深信服千里目安全实验室成功复现此漏洞并发布漏洞分析文章。
点击 阅读原文 ,及时关注深信服智安全Wiki平台查询漏洞的产品解决方案(需登录)~