Apache OFBiz CVE-2023-49070 & 最新 CVE-2023-51467 未授权分析(RCE/SSRF/LFR)
字数 2688 2025-08-19 12:42:26
Apache OFBiz 漏洞分析:CVE-2023-49070 & CVE-2023-51467
概述
本文详细分析Apache OFBiz框架中的两个重要漏洞:CVE-2023-49070和CVE-2023-51467。这些漏洞涉及未授权访问、远程代码执行(RCE)、服务器端请求伪造(SSRF)和本地文件读取(LFR)等多种安全问题。
CVE-2023-51467(鉴权绕过)
影响范围
- Apache OFBiz < 18.12.10
测试版本
- Apache OFBiz 18.12.9
漏洞原理
该漏洞通过两种方式绕过安全限制:
-
绕过
</serializable关键词检测:- 使用URI
/control/xmlrpc/;/,利用;作为矩阵参数分隔符的特性绕过检测 - 参考:https://www.baeldung.com/cs/url-matrix-vs-query-parameters#tcp-connection
- 使用URI
-
绕过XML-RPC接口认证:
- 关键代码路径:
org.apache.ofbiz.webapp.control.LoginWorker#checkLogin - 当用户名为空时,
unpwErrMsgList会添加提示信息 - 设置
requirePasswordChange参数为Y,使得返回值为requirePasswordChange而非error,从而绕过认证
- 关键代码路径:
漏洞修复
- 修复提交:https://github.com/apache/ofbiz-framework/commit/c59336f604f503df5b2f7c424fd5e392d5923a27
- 直接移除了xmlrpc模块
CVE-2023-51467(RCE/SSRF/LFR)
影响版本
- Apache OFBiz < 18.12.11
- 测试版本:18.12.10
Groovy RCE漏洞
漏洞接口
/webtools/control/ProgramExport- 映射的servlet:
org.apache.ofbiz.webapp.control.RequestHandler#doRequest
漏洞分析
-
请求处理流程:
- 从
controller.xml读取配置 - 虽然设置了鉴权,但已被绕过
- 没有设置event handler,只设置了响应信息,类型为
view
- 从
-
视图渲染:
org.apache.ofbiz.webapp.control.RequestHandler#renderView- 视图配置从
controller.xml读取 - 参考文档:https://cwiki.apache.org/confluence/display/OFBIZ/Understanding+the+OFBiz+Widget+Toolkit
-
Groovy脚本执行:
- 通过设置
groovyProgram参数执行脚本 - 调用栈:
org.apache.ofbiz.base.util.UtilProperties#getResourceBundle org.apache.ofbiz.base.util.UtilProperties#createResourceName org.apache.ofbiz.base.util.UtilProperties#getProperties org.apache.ofbiz.base.util.UtilProperties.ExtendedProperties#ExtendedProperties
- 通过设置
-
安全过滤:
- 调用
SecuredUpload.isValidText进行检查 - 黑名单不严格(如未过滤
execute) - 可通过字符串拼接绕过执行任意命令
- 调用
SSRF & 任意配置读取
漏洞修复差异
- https://github.com/apache/ofbiz-framework/commit/d8b097f6717a4004acf023dfe929e0e41ad63faa
- 将空检查替换为
UtilValidate.isEmpty(),增加了字符串长度检查
- 将空检查替换为
- https://github.com/apache/ofbiz-framework/commit/82c17376880a8fd8a11261e1e00dad45cfed344d
漏洞接口
/webtools/control/getJSONuiLabelArray- 默认国际化配置文件:
framework/common/config/CommonUiLabels.xml - 路由信息:
framework/common/webcommon/WEB-INF/common-controller.xml
漏洞分析
-
请求处理:
- 通过
jQuery发送POST请求到getJSONuiLabelArrayAPI - 传递
requiredLabels参数 - 参考文件:
themes/common-theme/webapp/common/js/util/OfbizUtil.jsapplications/party/webapp/partymgr/static/PartyProfileContent.js
- 通过
-
配置文件读取:
- 关键方法:
org.apache.ofbiz.base.util.UtilProperties#getResourceBundle createResourceName方法处理:- 第三个参数为
true时移除.xml/.properties后缀 - 添加
locale本地信息后缀
- 第三个参数为
- 如果
bundleCache中没有对应项:- 移除
locale后缀 - 调用
getProperties方法
- 移除
- 关键方法:
-
URL解析:
org.apache.ofbiz.base.util.UtilProperties#getPropertiesresolvePropertiesUrl解析resource的URL- 支持多种协议(
http/file等) - 创建URL实例并建立连接读取内容
-
内容回显:
org.apache.ofbiz.base.util.UtilProperties#getMessage- 读取键值对,匹配传入的标签值并回显
漏洞利用
-
配置文件读取示例:
- 读取
applications/accounting/config/payment.properties
- 读取
-
SSRF利用:
- 创建自定义
properties文件 - 通过HTTP服务提供文件
- 构造请求触发SSRF
- 创建自定义