天天看点

漏洞深度分析|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