漏洞深度分析|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、上传测试文件到静态资源目录

 

3.、上传成功

 

漏洞分析

首先查看官方补丁发现修改了多处文件,其中比较核心的是对FileSystemContentRepository.java的修改,在patch代码中对传入敏感函数的文件路径进行了过滤,这些函数有deleteFileInternal、fetchFile、writeFileToFileSystem

 

在对上传文件的路径进行校验的同时,也使用白名单的方式检查了上传文件的类型

 

看完补丁再分析下调用链。Fineract项目的组织方式跟普通spingboot项目不太一样,Fineract的模块都是按目录放到一起的。存在漏洞的模块是documentmanagement,代码组织方式如下:

 

分析代码发现api入口点如下:

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

 

调用了addNewClientImage方法

 

忽略不重要步骤,最终上传的文件被writeFileToFileSystem处理,而该函数就是patch修复的函数之一

 

修复方式

升级到1.8.1版本(包含)以上

参考链接

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值