漏洞描述
Spring 是一個開放源代碼的設計層面框架,是為了解決企業應用開發的復雜性而創建的。它解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。
當用到 Spring 的參數綁定功能,同時 Spring core 運行在 jre/jdk/openjdk 9 以上的版本時, class 新增了 getModlue()方法,可以通過其來獲取 classLoader,從而繞過現有的 spring 的 java.lang.class.classLoader 黑名單防御機制,達到調用 classLoader 的目的,配合不同的 Loader 的 tter、getter 方法,達到命令執行或任意文件讀寫等一系列效果。
例如:環境中使用的 tomcat 的 webappsclassloader,通過 get 方法依次獲取到
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/loader/Web appClassLoaderBa.html#getResources()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/WebResourc eRoot.html#getContext()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/Container. html#getParent()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/Container. html#getPipeline()
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/Pipeline.h tml#getFirst()
getFirst 獲取到的 Valve 為
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/valves/Acc
essLogValve.html 從而進行文件寫入操作。
漏洞利用條件1.JDK/JRE/OpenJDK 版本: 9 及以上;
2.使用了 Spring-beans 包;
3.使用了 Spring 參數綁定;
4.Spring 參數綁定使用的是非基本參數類型,例如一般的 POJO 即可;
注:不是 java+Spring 就一定存在漏洞,還要根據具體業務代碼來進一步判斷。
已知受影響應用Tomcat
其他暫未確定
修復建議官方暫時還未進行任何更新,臨時建議:
1.在應用組全局搜索@InitBinder 注解,看看方法體內是否調用dataBinder.tDisallowedFields 方法,如果發現此代碼片段的引入,則在原來的黑名單中添加{"class.*","Class.*","*.class.*","*.Class.*"}。(注:如果此代碼片段使用較多,則需要每個地方都追加)
2.在應用系統的項目包下新建以下全局類,并保證這個類被 Spring 加載到(推薦在Controller 所在的包中添加)。完成類添加后,需對項目進行重新編譯打包和功能驗證測試,并重新發布項目。
即時檢測檢測邏輯:檢查當前系統中是否存在 spring-beans jar 包(包含 SpringBoot 子包以及 war 包啟動方式)及關聯 java 進程版本是否大于等于 9。
by【青藤】
本文發布于:2023-02-28 20:12:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/167766248278706.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:eroot(榮耀60seroot).doc
本文 PDF 下載地址:eroot(榮耀60seroot).pdf
| 留言與評論(共有 0 條評論) |