一、 漏洞描述
Spring官方发布安全公告,披露了一个Spring框架可在JDK>=9版本下实现远程代码执行的漏洞(CVE-2022-22965)。
二、 漏洞详情
CVE-2022-22965: Spring Framework远程代码执行漏洞
CVE: CVE-2022-22965
组件: Spring Framework
漏洞类型: 代码问题
影响: 远程代码执行
简述: 见漏洞描述。
三、 影响版本
影响产品或系统版本 | 安全版本 | |
Spring Framework | JDK>=9版本下的Spring Framework | spring-framework v5.3.18
spring-framework v5.2.20.RELEASE |
四、 安全版本
见三
五、 安全建议
漏洞自查:
可按照以下步骤来判断是否受此漏洞影响:
1.排查是否使用了Spring框架(包括但不限于以下方法)
(1)排查项目中是否使用了Spring框架:
可遍历项目文件查找是否包含spring-beans-*.jar
(2)排查war包中是否存在Spring框架:
检查war包内是否存在spring-beans-*.jar文件,若存在则表示使用spring开发框架;若不存在,则进一步确认是否存在CachedIntrospectionResults.class文件,若存在则表示使用Spring开发框架或衍生框架。
(3)排查jar包部中的Spring:
检查Jar包内是否存在spring-beans-*.jar文件,若存在则表示使用Spring开发框架;若不存在,则进一步确认是否存在CachedIntrospectionResults.class文件,若存在则表示使用Spring开发框架或衍生框架。
2.排查包含Spring框架的项目使用的JDK版本,如果JDK版本>=9则存在风险。
漏洞处置:
目前Spring官方已发布安全补丁,建议及时更新Spring至官方最新安全版本来修复此漏洞。
临时缓解措施:
1.全局搜索@InitBinder注解,判断方法体内是否有dataBinder.setDisallowedFields方法,如果有使用则在原来的黑名单中添加:
{"class.*","Class.*","*.class.*","*.Class.*"}
(注:如果此代码片段使用较多,需要每个地方都追加)
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);}
}