Spring Framework远程代码执行漏洞

  • 发布时间 2022-03-31

  • 漏洞等级 High

  • CVE编号 CVE-2022-22965

  • 影响范围:同时满足以下三个条件可确定受此漏洞影响:

    JDK 版本 >= 9

    使用了 Spring 框架或衍生框架

    项目中 Controller 参数接收实体类对象并存在代码调用

1.漏洞描述

Spring Framework 是一个开源应用框架,旨在降低应用程序开发的复杂度。它是轻量级、松散耦合的。它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序开发提供了一个有凝聚力的框架。但是在JDK9及以上版本环境中,一些新的版本特性,可以使攻击者绕过一些安全特性,借助某些中间件构造数据包修改敏感文件,达到远程代码执行目的

2.漏洞影响排查方法

2.1.JDK 版本号排查

在业务系统的运行服务器上,执行“java -version"命令查看运行的 JDK 版本。

如果版本号小于等于 8,则不受此漏洞影响。

(不受影响的版本)

2.2.Spring 框架使用情况排査

如果业务系统项目以 war(jar) 包形式部署,按照如下的步骤进行判断:

  1. 解压 war(jar) 包:将war(jar)文件的后缀修改成 .zip ,解压 zip 文件。
  2. 在解压缩目录下搜索是否存在 spring-beans-*.jar 格式的文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了Spring框架进行开发。
  3. 如果spring-beans-*.jar文件不存在,则在解压缩目录下搜索CachedlntrospectionResults.class文件是否存在,如存在则说明业务系统使用了Spring框架进行开发。

3.解决方案

3.1.版本升级

目前,Spring官方已发布漏洞修复版本,请用户及时更新至最新版本:

https://github.com/spring-projects/spring-framework/tags

安全版本:

Spring Framework == 5.3.18

Spring Framework == 5.2.20

3.2.缓解措施

无法升级版本的用户,建议采用以下两个临时方案进行防护。

UWAF 防护

在UWAF配置中,根据实际业务部署的情况,配置正则规则,对 "class.module.*" 字符串添加过滤规则,在部署过滤规则后,对业务运行情况进行测试,避免产生额外影响。

注意:其中流量特征 "class.module.*" 对大小写不敏感。

临时修复措施

需同时按以下两个步骤进行漏洞的临时修复:

  1. 在应用中全局搜索@InitBinder 注解,看方法体内是否调用dataBinder.setDisallowedFields方法。如果发现此代码片段的引入,则在原来的黑名单中添加 { " class.module.*"}。注意:如果此代码片段使用较多,需要每个地方都追加。
  2. 在应用系统的项目包下新建以下全局类,并保证这个类被Spring加载到(推荐在 Controller所在的包中添加)。完成类添加后,需对项目进行重新编译打包和功能验证测试,并重新发布项目。
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder; @ControllerAdvice@Order(10000)
public class GlobalControllerAdvice{ @InitBinder
public void setAllowedFields(webdataBinder dataBinder){
String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};
dataBinder.setDisallowedFields(abd);
} }

Java往期文章

Java全栈学习路线、学习资源和面试题一条龙

我心里优秀架构师是怎样的?

免费下载经典编程书籍

最新漏洞:Spring Framework远程代码执行漏洞的更多相关文章

  1. Spring Framework远程代码执行漏洞复现(CVE-2022-22965)

    1.漏洞描述 漏洞名称 Spring Framework远程代码执行漏洞 公开时间 2022-03-29 更新时间 2022-03-31 CVE编号 CVE-2022-22965 其他编号 QVD-2 ...

  2. Spring Framework 远程命令执行漏洞(CVE-2022-22965)

    Spring Framework 远程命令执行漏洞 (CVE-2022-22965) 近日,Spring 官方 GitHub issue中提到了关于 Spring Core 的远程命令执行漏洞,该漏洞 ...

  3. 漏洞复现-Office远程代码执行漏洞 (CVE-2017-11882&CVE-2018-0802)

    漏洞原理 这两个漏洞本质都是由Office默认安装的公式编辑器(EQNEDT32.EXE)引发的栈溢出漏洞(不要问什么是栈溢出,咱也解释不了/(ㄒoㄒ)/~~) 影响版本 Office 365 Mic ...

  4. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  5. 漏洞复现——tomcat远程代码执行漏洞

    漏洞描述: 当存在该漏洞的Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT请求方法,攻击者可通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行 影响范 ...

  6. Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)

    影响版本 Spring WebFlow 2.4.0 - 2.4.4 访问id为1的酒店http:/ :8080/hotels/1,点击预订按钮"Book Hotel",填写相关信息 ...

  7. 泛微e-cology OA系统远程代码执行漏洞及其复现

    泛微e-cology OA系统远程代码执行漏洞及其复现 2019年9月19日,泛微e-cology OA系统自带BeanShell组件被爆出存在远程代码执行漏洞.攻击者通过调用BeanShell组件中 ...

  8. Spring框架的反序列化远程代码执行漏洞分析(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  9. struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复

          Struts2 被发现存在新的高危远程代码执行漏洞,可造成服务器被入侵,只要是Struts2版本 低于 2.3.14.3 全部存在此漏洞.目前官方已经发布了最新的版本进行修复.请将stru ...

随机推荐

  1. 【Oracle】PLSQL如何更新、提交数据库中数据

    转至:https://blog.csdn.net/Bee_AI/article/details/89279612 Oracle更新单表数据时,一般使用SELECT--FOR UPDATE语句,这条语句 ...

  2. 常用的一些性能查询sql语句

    转至:https://blog.csdn.net/bosschen/article/details/84829912 --查看表锁 select * from sys.v_$sqlarea where ...

  3. 『现学现忘』Docker相关概念 — 8、虚拟化技术和容器技术的关系

    目录 1.云计算中虚拟化技术和容器技术到的关系 2.虚拟机和容器对比 3.虚拟化技术和容器技术区别 1.云计算中虚拟化技术和容器技术到的关系 通过一个关于房间和住人的小问题,我们来初步的理解一下虚拟化 ...

  4. keepass实践

    参考软件教程 篇一:从入门到熟练:KeePass全网最详使用指南 运行之后快到来不及截图,就是这么速

  5. springCould注解和配置以及pom依赖

    SpringCloud注解和配置以及pom依赖说明 在本文中说明了pom依赖可以支持什么功能,以及支持什么注解,引入该依赖可以在application.properties中添加什么配置. 1.Spr ...

  6. laravel 返回统一的json数据

    laravel 在Api接口开发中,可以使用 response()->json(["code"=>200,"msg"=>"ok&qu ...

  7. 浅析XML

    概述XML文档结构 每个XML文档都分为两部分:序言(Prolog)和文档元素(或文档节点) 例子:写一段XML然后简单分析一下 <?xml version="1.0" en ...

  8. numpy: np.logical_and/or/not (逻辑与/或/非)+python3-曲线拟合(polyfit/polyval)

    可以用拟合两个变量之间的关系,然后根据一个变量,去推测出另外一个变量的推测值

  9. vue路由传参丢失问题

    vue路由传递参数如果用params传递参数,那么页面刷新就会丢失数据,可以改用query来传递参数,这样刷新就不会丢失

  10. 基于Spring Cache实现二级缓存(Caffeine+Redis)

    一.聊聊什么是硬编码使用缓存? 在学习Spring Cache之前,笔者经常会硬编码的方式使用缓存. 我们来举个实际中的例子,为了提升用户信息的查询效率,我们对用户信息使用了缓存,示例代码如下: @A ...