補丁發布!Spring Framework 遠程代碼執行漏洞
0x01事件概述
360漏洞云近日監測到Spring框架中存在一個嚴重的遠程代碼執行漏洞,該漏洞影響Jdk 9.0以上版本的Spring框架及其衍生框架,包括但不限于Spring Cloud、Spring Boot等。此漏洞利用方式簡單,危害嚴重,Spring官方已針對此漏洞發布新版本,建議用戶盡快升級版本或采取其他防護措施,避免受到該漏洞的攻擊。
漏洞細節 漏洞POC 漏洞EXP 在野利用 公開 公開 公開 存在 |
0x02漏洞描述
Spring框架(Framework)是一個開源的輕量級J2EE應用程序開發框架,提供了IOC、AOP及MVC等功能,解決了程序人員在開發中遇到的常見問題,提高了應用程序開發便捷度和軟件系統構建效率。 
Spring框架或其衍生框存在一個嚴重的遠程代碼執行漏洞,由于Spring框架存在處理流程缺陷,攻擊者可在遠程條件下,實現對目標主機的后門文件寫入和配置修改,繼而通過后門文件訪問獲得目標主機權限。使用Spring框架或衍生框架構建網站等應用,且同時使用JDK版本在9及以上版本的,易受此漏洞攻擊影響。
經 360 漏洞云安全專家研判,Spring是當今使用最為廣泛的 J2EE 框架Spring 及其衍生框架的全球部署數量超千萬,排名靠前的國家為中國和美國。受漏洞影響的是 Spring Framework,任何引用Spring Framework的框架均受此漏洞影響。包括但不限于 Spring Boot、Spring Cloud、Spring Data、Spring Security等。這些框架的用戶涵蓋了政府、銀行、醫院、學校、電商等眾多部門和行業。由于此漏洞利用方式簡單,受漏洞影響的服務發布廣泛,漏洞影響極其嚴重。
Spring Framework 遠程代碼執行漏洞 漏洞編號 CVE-2022-22965 漏洞類型 遠程代碼執行 漏洞等級 嚴重(10.0) 公開狀態 已公開 在野利用 存在 漏洞描述 Spring Framework存在遠程代碼執行漏洞,在 JDK 9 及以上版本環境下,遠程攻擊者可利用該漏洞寫入惡意代碼導致遠程代碼執行漏洞。引用Spring框架的Spring衍生框架均受此漏洞影響。 |
0x03影響版本
- Spring Framework 5.3.X < 5.3.18
- Spring Framework 5.2.X < 5.2.2
且所在運行環境為JDK9及以上版本
0x04排查方法
- JDK 版本號排查
在業務系統的運行服務器上,執行“java -version”命令查看運 行的 JDK 版本,如果版本號小于等于 8,則不受漏洞影響。
- Spring 框架使用情況排查
1. 如果業務系統項目以 war 包形式部署,按照如下步驟進行判斷。
- 解壓 war 包:將 war 文件的后綴修改成.zip ,解壓 zip 文件
- 在解壓縮目錄下搜索是否存在 spring-beans-.jar 格式的 jar 文 件(例如 spring-beans-5.3.16.jar),如存在則說明業務系統使用了 spring 框架進行開發。
- 如果 spring-beans-.jar 文件不存在,則在解壓縮目錄下搜索CachedIntrospectionResuLts.class 文件是否存在,如存在則說明業 務系統使用了 Spring 框架開發。
2. 如果業務系統項目以 jar 包形式直接獨立運行,按照如下步驟進行 判斷。
- 解壓 jar 包:將 jar 文件的后綴修改成.zip,解壓 zip 文件。
- 在解壓縮目錄下搜索是否存在 spring-beans-.jar 格式的 jar 文件 (例如 spring-beans-5.3.16.jar),如存在則說明業務系統使用了 spring 框架進行開發。
- 如果 spring-beans-.jar 文件不存在,則在解壓縮目錄下搜索 CachedIntrospectionResuLts.class 文件是否存在,如存在則說明業 務系統使用了 spring 框架進行開發。
0x05漏洞復現
2022年3月30日,360漏洞云安全專家已第一時間復現上述漏洞,演示如下:


CVE-2021-22965
完整POC代碼已在360漏洞云情報平臺(https://loudongyun.#/)發布,360漏洞云情報平臺用戶可通過平臺下載進行安全自檢。
0x06修復建議
官方修復建議
目前,Spring官方已經在5.2.20,5.3.18版本修復上述漏洞,用戶請及時升級到安全版本。
https://github.com/spring-projects/spring-framework/tags
臨時修復建議
- 使用WAF緩解
用戶請根據實際部署業務的流量情況,在WAF或其他網絡防護設備上實現對"classLoader.","class.module.*","class.","Class.",".class.",".Class.", 等字符串的規則過濾,請注意其中流量特征 "class.module.*" 對大小寫不敏感。用戶注意在部署規則后,對業務允許情況進行測試,避免產生額外影響。
- 其他臨時緩解措施
全局搜索 @InitBinder注解,判斷方法體內是否有dataBinder.setDisallowedFields方法,如果有使用則在原來的黑名單中添加:{"class.","Class.",".class.",".Class."} (注:如果此代碼片段使用較多,需要每個地方都追加)
在應用系統的項目包下新建以下全局類,并保證這個類被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); }}
與此同時,請做好資產自查以及預防工作,以免遭受黑客攻擊。