Spring Framework远程代码执行漏洞分析(最新漏洞)

 更新时间:2022年04月01日 09:09:23   作者:持行非就  
Spring Framework 是一个开源应用框架,旨在降低应用程序开发的复杂度,它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序开发提供了一个有凝聚力的框架,对Spring远程代码执行漏洞相关知识感兴趣的朋友一起看看吧

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) 包形式部署,按照如下的步骤进行判断:

  • 解压 war(jar) 包:将war(jar)文件的后缀修改成 .zip ,解压 zip 文件。
  • 在解压缩目录下搜索是否存在 spring-beans-*.jar 格式的文件(例如spring-beans-5.3.16.jar),如存在则说明业务系统使用了Spring框架进行开发。
  • 如果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.*" 对大小写不敏感。

临时修复措施

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

  • 在应用中全局搜索@InitBinder 注解,看方法体内是否调用dataBinder.setDisallowedFields方法。如果发现此代码片段的引入,则在原来的黑名单中添加 { " class.module.*"}。注意:如果此代码片段使用较多,需要每个地方都追加。
  • 在应用系统的项目包下新建以下全局类,并保证这个类被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);
   }
}

到此这篇关于Spring Framework远程代码执行漏洞的文章就介绍到这了,更多相关Spring远程代码执行漏洞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 中的语法糖,真甜

    Java 中的语法糖,真甜

    语法糖(Syntactic sugar),也叫做糖衣语法,是英国科学家发明的一个术语,通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.这篇文章主要介绍了Java 中的语法糖知识,需要的朋友可以参考下
    2020-12-12
  • java map中相同的key保存多个value值方式

    java map中相同的key保存多个value值方式

    这篇文章主要介绍了java map中相同的key保存多个value值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringBoot中的ImportSelector类动态加载bean详解

    SpringBoot中的ImportSelector类动态加载bean详解

    这篇文章主要介绍了SpringBoot中的ImportSelector类动态加载bean详解,ImportSelector接口是spring中导入外部配置的核心接口,根据给定的条件(通常是一个或多个注释属性)判定要导入那个配置类,在spring自动化配置和@EnableXXX中都有它的存在,需要的朋友可以参考下
    2024-01-01
  • Java String 对象(你真的了解了吗)

    Java String 对象(你真的了解了吗)

    这篇文章主要介绍了Java String 对象(你真的了解了吗),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Quarkus改造Pmml模型项目异常记录及解决处理

    Quarkus改造Pmml模型项目异常记录及解决处理

    这篇文章主要为大家介绍了Quarkus改造Pmml模型项目是遇到的异常记录以及解决方法,有需要的同学可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • 用JAVA 设计生成二维码详细教程

    用JAVA 设计生成二维码详细教程

    本文主要介绍用JAVA 设计生成二维码,这里一步一步详细介绍用 java 如何设计二维码,并附有代码示例以便参考,有需要的小伙伴可以参考下
    2016-08-08
  • gradle中的增量构建浅析

    gradle中的增量构建浅析

    这篇文章主要介绍了gradle中的增量构建,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Springboot在有锁的情况下正确使用事务的实现代码

    Springboot在有锁的情况下正确使用事务的实现代码

    这篇文章主要介绍了Springboot在有锁的情况下如何正确使用事务,今天通过一个实验给大家分析一下商品超卖问题,模拟场景分析通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • 可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析

    可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析

    以下是对可视化Swing中JTable控件绑定SQL数据源的两种方法进行了详细的分析介绍,需要的朋友可以过来参考一下
    2013-07-07
  • Spring整合quartz做定时任务的示例代码

    Spring整合quartz做定时任务的示例代码

    这篇文章主要介绍了在spring项目使用quartz做定时任务,首先我这里的项目已经是一个可以跑起来的完整项目,web.xml里面的配置我就不贴出来了,具体实例代码跟随小编一起看看吧
    2022-01-01

最新评论