一、 漏洞描述
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);}
}