【漏洞分析】Spring远程代码执行漏洞解决方案
作为目前全球最受欢迎的Java轻量级开源框架,Spring允许开发人员专注于业务逻辑,简化Java企业级应用的开发周期。
Spring此前版本存在CVE-2010-1622漏洞,该漏洞由参数自动绑定机制导致,后通过黑名单方式修复。但JDK9后引入了Module,使得可以通过GetModule绕过黑名单限制,最终导致远程代码执行。当前漏洞评级为高危,编号CVE-2022-22965/CNVD-2022-23942 。
攻击者在满足特定条件的情况下,可远程通过框架参数绑定功能获取AccessLogValve对象,从而触发pipeline机制并写入任意路径下的文件。
漏洞影响范围
已知受影响版本:
Spring Framework < 5.3.18
Spring Framework < 5.2.20
及其衍生产品:
JDK ≥ 9
JRE ≥ 9
不受影响版本:
Spring Framework = 5.3.18
Spring Framework = 5.2.20
或
JDK < 9
JRE < 9
我是否受到该漏洞威胁?(漏洞排查)
Step 1:检查是否使用Spring框架,若未使用,则不存在该漏洞。
由于Java项目存在打包方式各异、Spring Bean常作为基础组件Lib打包、非规范化命名等情况,推荐使用自动化迭代解压的jar方式同时对spring-beans-*.jar和CachedIntrospectionResults.class进行匹配搜索。如果存在匹配,说明使用了Spring框架。
Step 2:检查项目是否使用Spring参数绑定,若未使用,则不存在该漏洞。
由于该漏洞需要利用SpringMVC的参数绑定,因此项目若未使用参数绑定,则不受该漏洞威胁。
Step 3:检查中间件使用的JDK版本,若版本号小于9,则不存在该漏洞。
通过系统进程确认中间件使用的JDK路径,在命令行执行java-version获取当前的JDK版本。
Step 4:检查当前使用的中间件是否为Tomcat,若未使用,则暂不受该漏洞影响。
目前公开的漏洞利用代码只针对Tomcat中间件,但不排除后续有新的利用代码出现。因此,非Tomcat中间件仍存在风险。
Step 5:检查Tomcat是否启用AccessLog,若未启用,则暂不受该漏洞影响。
目前公开的漏洞利用代码是通过覆盖Tomcat日志相关配置实现后门文件写入,但不排除后续有新的利用方式出现。在server.xml配置文件中,通过org.apache.catalina.valves.AccessLogValve关键字,可定位到AccessLog相关配置。
我要如何防护该漏洞?(处置建议)
1、官方防护措施
官方已发布新版本5.2.20.RELEASE和5.3.18修复该漏洞,受影响的用户可尽快进行更新。
下载链接:https://github.com/spring-projects/spring-framework/releases
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 a{
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] abd = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};
dataBinder.setDisallowedFields(abd);
}
}
3、使用安博通深度安全网关
安博通深度安全网关已支持该漏洞防护,需要将规则包升级到20220331及以上版本。升级位置为:系统维护→系统升级→自动升级,点击立即升级或下载离线特征库手动升级。
规则编号:957764
规则名称:spring framework rce漏洞
防护前对比
防护后效果
参考链接
https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement
https://github.com/spring-projects/spring-framework/compare/v5.3.17...v5.3.18