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

2022-04-0288

一、背景介绍

近日,市委网信办技术支撑单位监测到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 缓解措施

- 暂时官方还未发布正式补丁

- 临时解决方案

(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