天天看點

漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

作者:棱鏡七彩7cai
漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

項目介紹

Apache Fineract 是一個開源的系統,用于核心銀行系統平台化建設。為創業者、金融機構和服務提供商提供了一個可靠、健壯的、可負擔得起的金融服務解決方案。

項目位址

https://github.com/apache/fineract

漏洞概述

Apache Fineract 在 1.8.1 之前的版本中由于 FileSystemContentRepository.java 類對使用者傳入的檔案路徑名限制不當進而存在路徑周遊漏洞,經過身份驗證的攻擊者可利用此漏洞删除或覆寫系統檔案,Fineract 加載攻擊者上傳的惡意檔案時将遠端執行惡意代碼。

影響版本

apache/fineract@(-∞, 1.8.1)

環境搭建

參考官方文檔,使用docker-compose搭建

https://github.com/apache/fineract

漏洞複現

  1. 官方文檔中建構的docker預設使用者是"User" : "nobody:nogroup"是以需要修改使用者權限為root,修改方式為在docker-compose檔案中添加user: "0:0"
  2. 上傳測試檔案到靜态資源目錄
漏洞深度分析|Apache Fineract 遠端代碼執行漏洞
  1. 上傳成功
漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

漏洞分析

首先檢視官方更新檔發現修改了多處檔案,其中比較核心的是對FileSystemContentRepository.java的修改,在patch代碼中對傳入敏感函數的檔案路徑進行了過濾,這些函數有deleteFileInternal、fetchFile、writeFileToFileSystem

漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

在對上傳檔案的路徑進行校驗的同時,也使用白名單的方式檢查了上傳檔案的類型

漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

看完更新檔再分析下調用鍊。Fineract項目的組織方式跟普通spingboot項目不太一樣,Fineract的子產品都是按目錄放到一起的。存在漏洞的子產品是documentmanagement,代碼組織方式如下:

漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

分析代碼發現api入口點如下:

org.apache.fineract.infrastructure.documentmanagement.api.ImagesApiResource#updateClientImage(java.lang.String, java.lang.Long, java.lang.Long, java.io.InputStream, FormDataContentDisposition, FormDataBodyPart)

漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

調用了addNewClientImage方法

漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

忽略不重要步驟,最終上傳的檔案被writeFileToFileSystem處理,而該函數就是patch修複的函數之一

漏洞深度分析|Apache Fineract 遠端代碼執行漏洞

修複方式

更新到1.8.1版本(包含)以上

參考連結

https://nvd.nist.gov/vuln/detail/CVE-2022-44635

https://github.com/apache/fineract/commit/90f854b68886458a466b048807c26ccf31a6f555