Spring Cloud Config Server 任意文件讀取漏洞安全通告

發布時間 2019-04-18

漏洞編號和級別


CVE編號:CVE-2019-3799,危險級別:高危,CVSS分值:官方未評定


影響版本


Spring Cloud Config 2.1.0 to 2.1.1

Spring Cloud Config 2.0.0 to 2.0.3

Spring Cloud Config 1.4.0 to 1.4.5

其他不受支持的老版本 (如Spring Cloud Config1.3及其以下版本)

值得注意的是通過maven自動構建的應用,如果不指定spring-cloud-config-server的版本,默認安裝的還是spring-cloud-config-server 1.3.0不安全版本


漏洞概述


Spring Cloud Config一套開源分布式系統配置服務,為分布式環境提供外部配置服務支持。Spring Cloud Config Server 路徑穿越與任意文件讀取漏洞,可通過構造的惡意請求直接讀取服務器任意文件,風險較大。


漏洞驗證


環境搭建: https://github.com/spring-cloud/spring-cloud-config#quick-start

GET /foo/default/master/..%252F..%252F..%252F..%252Fetc%252fpasswd HTTP/1.1

Host: localhost:8888




Spring Cloud Config項目是一個解決分布式系統的配置管理方案。它包含了ClientServer兩個部分,server提供配置文件的存儲、以接口的形式將配置文件的內容提供出去,client通過接口獲取數據、并依據此數據初始化自己的應用。Spring cloud使用gitsvn存放配置文件,默認情況下使用git。


環境搭建:


Pom.xml 配置依賴



Application.yml 設置配置文件存放的遠程倉庫地址



啟動文件



org/springframework/cloud/config/sever/resource/ResourceController.java中可以查看http請求格式為@RequestMapping("/{name}/{profile}/{label}/**")

name為應倉庫名稱

profile為應配置文件環境

label 為git分支名

** 為具體文件名

實際測試中只需要label為存在的分支名即可,一般git倉庫都存在master分支

所以通用poc地址為:

/test/dev/master/..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd



傳入參數后 會調用this.resourceRepository.findOne(name, profile, label, path)并根據配置文件中的倉庫地址去組裝新的地址并獲取文件內容。我們跟入到org.springframework.cloud.config.server.resourcefindOne方法中。


findOne 中location為遠程git地址下載到本地的tmp目錄地址,然后和我們傳入的path拼裝為file:/var/folders/2t/2pcjgph96ms9jltyfnm5brr40000gn/T/config-repo-1763575875528585941/..%2F..%2F..%2F..%2F..%2F..%2F.-dev.%2Fetc%2Fpasswd。


this.resourceLoader.getResource(path)方法為 spring.core中封裝的獲取資源文件方法,默認會還原URLdecode的地址并通過 ../../將前面的tmp路徑地址吃掉,最終達到穿越到任意路徑,讀取任意文件的效果。


修復建議


Spring Cloud Config 2.1.x 升級至 to 2.1.2,Spring Cloud Config 2.0.x u升級至 2.0.4,Spring Cloud Config 1.4.x 升級至 1.4.6老版本升級到指定的安全版本spring-cloud-config-server應部署在內網中并使用Spring Security進行用戶身份鑒定。


Spring Security配置支官方文檔Securing Spring Cloud Config Server

https://github.com/spring-cloud/spring-cloud-config/commit/3632fc6f64e567286c42c5a2f1b8142bfde505c2


參考鏈接


https://pivotal.io/security/cve-2019-3799