江明涛的博客
关于Spring框架远程代码执行RCE 0-Day漏洞提示
关于Spring框架远程代码执行RCE 0-Day漏洞提示

关于Spring框架远程代码执行RCE 0-Day漏洞提示

一、背景介绍
3月29日,市委网信办技术支撑单位监测到Spring框架远程代码执行RCE 0-Day漏洞,该漏洞的适用面较广,影响较大。
1.1 漏洞描述
该漏洞已经被证实,Spring中存在的漏洞,结合 jdk9 及以上新版本的特性,在成功利用此漏洞可以导致权限提升,可导致任意命令执行、文件读取、后门、DoS攻击等危害。
1.2 漏洞编号
暂无
1.3 漏洞等级
严重
二、修复建议
2.1 漏洞受影响条件

  • JDK 9 及以上版本
  • Spring 框架以及衍生的框架,存在spring-beans-*.jar文件或者存在CachedIntrospectionResults.class
    2.2 漏洞排查方法
  • JDK版本号排查:在业务系统的运行服务器上,Windows 操作系统可在运行中执行cmd 打开命令行窗口, Linux 操作系统可打开控制台窗口。执行 “java version” 命令查看运行的 JDK 版本。如果版本号小于等于 8 ,则不受漏洞影响。
  • Spring 框架使用情况排查:
    a. 如果业务系统项目以 war 包形式部署,按照如下的步骤进行判断:
    (1)解压 war 包:将 war 文件的后缀修改为 zip ,解压 zip 文件。
    (2)在解压缩目录下搜索是否存在 spring beans —.jar 文件(例如 spring beans5.3.16.jar ),如存在则说明业务系统使用了 Spring 框架进行开发。 (3)如果 Spring beans —.jar 文件不存在,则在解压缩目录下搜索CacheIntrospectionResult.class 文件是否存在,如存在则说明业务系统使用了 Spring 框架进行开发
    b.如果业务系统项目以 jar 包形式直接独立运行,按照如下的步骤进行判断:
    (1)解压 jar 包:将 jar 文件的后缀修改成 zip ,解压 zip 文件。
    (2)在解压缩目录下搜索是否存在 spring beans —.jar 格式的 jar 文件(例如 spring beans 5.3.16.jar ),如存在则说明业务系统使用了 Spring 框架进行开发。 (3)如果 Spring beans —.jar 文件不存在 ,则在解压缩目录下搜索CacheIntrospectionResult.class 文件是否存在,如存在则说明业务系统使用了 Spring 框架进行开发
    2.3 缓解措施

解决方案:

将 Spring 框架升级到 5.3.17 版本,官方已修复!

临时解决方案
(1)在WAF设备可以增加规则,拦截关键词”class.“、”Class.“、”.class.“、”.Class.“等字符串的规则过滤,有可能影响业务,建议先开启监控模式;
(2)代码级别,全局搜索 @InitBinder注解,判断方法体内是否有dataBinder.setDisallowedFields方法,如果有使用则在原来的黑名单中添加:{“class.“,”Class.“,”.class.“,”.Class.“}。结合业务状况,可能存在一定风险,建议进行测试。
2.4 引用信息
官方commit信息: https://github.com/spring-projects/spring-framework/commit/7f7fb58dd0dae86d22268a4b59ac7c72a6c22529

上次更新时间 13 3 月, 2023 at 09:59 上午