Spring Framework遠(yuǎn)程代碼執(zhí)行漏洞

 漏洞資訊     |      2022-04-01

一、  漏洞描述

Spring官方發(fā)布安全公告,披露了一個(gè)Spring框架可在JDK>=9版本下實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行的漏洞(CVE-2022-22965)。

二、  漏洞詳情

CVE-2022-22965: Spring Framework遠(yuǎn)程代碼執(zhí)行漏洞

CVE: CVE-2022-22965

組件: Spring Framework

漏洞類型: 代碼問題

影響: 遠(yuǎn)程代碼執(zhí)行

簡(jiǎn)述: 見漏洞描述。

三、  影響版本


影響產(chǎn)品或系統(tǒng)版本

安全版本

Spring Framework

JDK>=9版本下的Spring Framework

spring-framework v5.3.18

spring-framework v5.2.20.RELEASE

四、  安全版本

見三

五、  安全建議

漏洞自查:

可按照以下步驟來判斷是否受此漏洞影響:

1.排查是否使用了Spring框架(包括但不限于以下方法)

(1)排查項(xiàng)目中是否使用了Spring框架:

可遍歷項(xiàng)目文件查找是否包含spring-beans-*.jar

(2)排查war包中是否存在Spring框架:

檢查war包內(nèi)是否存在spring-beans-*.jar文件,若存在則表示使用spring開發(fā)框架;若不存在,則進(jìn)一步確認(rèn)是否存在CachedIntrospectionResults.class文件,若存在則表示使用Spring開發(fā)框架或衍生框架。

(3)排查jar包部中的Spring:

檢查Jar包內(nèi)是否存在spring-beans-*.jar文件,若存在則表示使用Spring開發(fā)框架;若不存在,則進(jìn)一步確認(rèn)是否存在CachedIntrospectionResults.class文件,若存在則表示使用Spring開發(fā)框架或衍生框架。

2.排查包含Spring框架的項(xiàng)目使用的JDK版本,如果JDK版本>=9則存在風(fēng)險(xiǎn)。

漏洞處置:

目前Spring官方已發(fā)布安全補(bǔ)丁,建議及時(shí)更新Spring至官方最新安全版本來修復(fù)此漏洞。

臨時(shí)緩解措施:

1.全局搜索@InitBinder注解,判斷方法體內(nèi)是否有dataBinder.setDisallowedFields方法,如果有使用則在原來的黑名單中添加:

{"class.*","Class.*","*.class.*","*.Class.*"}

(注:如果此代碼片段使用較多,需要每個(gè)地方都追加)

2.在應(yīng)用系統(tǒng)的項(xiàng)目包下新建以下全局類,并保證這個(gè)類被Spring加載到(推薦在Controller所在的包中添加)。完成類添加后,需對(duì)項(xiàng)目進(jìn)行重新編譯打包和功能驗(yàn)證測(cè)試。并重新發(fā)布項(xiàng)目。

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);}

}