預警范圍:
使用了Spring MVC框架的應用系統且jdk版本>=9
漏洞描述:
SpringMVC框架的參數綁定功能提供了將請求中的參數綁定控制器方法中參數對象的成員變量,攻擊者通過構造惡意請求獲取AccessLogValve對象并注入惡意字段值觸發pipeline機制可寫入任意路徑下的文件。有專業機構監測發現該漏洞已被攻擊者利用,漏洞細節已經在小范圍公開。鑒于Spring MVC 框架應用廣泛,請各單位組織排查,有關系統是否使用了受影響的Spring MVC 框架。
危害評估:
漏洞利用難度低,應用范圍較廣,官方暫未發布修復補丁。
漏洞影響排查方法:
(一) JDK版本號排查
在業務系統的運行服務器.上,執行“java -version” 命令查看運行的JDK版本,如果版本號小于等于8,則不受漏洞影響。
(二)Spring框架使用情況排查
1. 如果業務系統項目以war包形式部署,按照如下步驟進行判斷。
(1) 解壓war包:將war文件的后綴修改成.zip ,解壓zip文件
(2)在解壓縮目錄下搜索是否存在spring-beans-*. jar格式的jar 文件(例如spring -beans-5.3.16. jar) , 如存在則說明業務系統使用了spring框架進行開發。
(3)如果spring-beans-*. jar文件不存在,則在解壓縮目錄下搜索CachedIntrospectionResuLts. class文件是否存在,如存在則說明業務系統使用了Spring框架開發。
2.如果業務系統項目以jar包形式直接獨立運行,按照如下步驟進行判斷。
(1)解壓jar包:將jar文件的后綴修改成. zip,解壓zip文件。
(2)在解壓縮目錄下搜索是否存在spring-beans-*. jar格式的jar文件(例如spring-beans-5.3. 16. jar) , 如存在則說明業務系統使用了spr ing框架進行開發。
(3)如果spring-beans-*. jar文件不存在,則在解壓縮目錄下搜索CachedIntrospectionResults. class文件是否存在,如存在則說明業務系統使用了spring框架進行開發。
(三)綜合判斷
在完成以上兩個步驟排查后,同時滿足以下兩個條件可確定受此漏洞影響:
(1) JDK版本號在9及以上的;
(2)使用了spring框架或衍生框架。
處置建議:
(一) WAP防護
在WAF等網絡防護設備上,根據實際部署業務的流量情況,實現對{"class. *", "Class. *","*. class. *”,"*. Class. *”}等字符串的規則過濾,并在部暑過濾規則后,對業務運行情況進行測試,避免產生額外影響。
(二)臨時修復措施
目前,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 setAl lowedFields ( webdataBinder dataBinder) {
String[ ]abd=new
string[ ]{"class.*","Class.*","*.class.*","*.Class. *"};
dataBinder . setDisallowedFields (abd) ;
}
}
本文來源:杭州默安科技有限公司應急響應中心