最后更新于2024年9月6日星期五15:27:39 GMT

Apache OFBiz below 18.12.16 is vulnerable to 在Linux和Windows上执行未经身份验证的远程代码. 没有有效凭证的攻击者可以利用web应用程序中缺少的视图授权检查,在服务器上执行任意代码. 通过绕过以前的补丁程序,可以方便地利用 CVE-2024-32113, CVE-2024-36104, and CVE-2024-38856; this patch bypass vulnerability is tracked as CVE-2024-45195.

Product Description

Apache OFBiz 是基于web的开源企业资源计划和客户关系管理套件吗. 该软件具有会计功能, 目录和供应链管理, 存储支付信息, and more. 许多大型组织都在使用Apache OFBiz, 以及之前披露的漏洞 见过野外的剥削吗.

Credit

This issue 是由Ryan Emmons向Apache OFBiz团队报告的, Rapid7首席安全研究员, 其他几位研究人员也是如此. 漏洞正在按照 Rapid7的漏洞披露策略. Rapid7非常感谢Apache OFBiz开源社区开发者在这个问题上的帮助和合作.

Vulnerability Context

2024年发布了一些针对Apache OFBiz的未经身份验证的代码执行cve. 8月,网络安全和基础设施安全局 added one of them, CVE-2024-32113, to its Known Exploited Vulnerabilities catalog. Based on our analysis, 其中三个漏洞是, essentially, 同样的漏洞,同样的根本原因. 由于我们今天披露的补丁旁路详细说明了之前的披露, we’ll outline them now.

CVE-2024-32113

这个序列中的第一个漏洞, CVE-2024-32113, was published on May 8, 2024, and it affected installs before v18.12.13. The OFBiz CVE entry describes this vulnerability as a path traversal vulnerability (CWE-22). 当意外的URI模式被发送到应用程序时, the state of the application’s current controller and view map is fragmented; controller-view map fragmentation takes place because the application uses multiple different methods of parsing the current URI: one to get the controller, one to get the view map.

As a result, 攻击者可以通过未经身份验证的控制器混淆已实现的逻辑,从而获取经过身份验证的视图映射并与之交互. When this happens, 只执行控制器授权检查, 攻击者可以使用它来访问执行SQL查询或代码等操作的仅管理员视图映射.

一个名为“ProgramExport”的经过身份验证的管理员视图映射将执行Groovy脚本, and this view map can be leveraged to execute arbitrary code without authentication. 此漏洞的有效负载示例, which uses path traversal to fragment the controller-view map state, is shown below.

curl http://target: 8443 / webtools /控制/ forgotPassword /../ProgramExport' -d "groovyProgram=throw+new+Exception('echo cmd output: `id`'.execute().text);" -vvv -k --path-as-is

The OFBiz Jira issue 该漏洞的描述是“某些url在产生问题之前需要被拒绝”。, 修复是如何实现的. 修复更改包括试图在解析获取的控制器和视图映射之前对url进行规范化的代码. 这个补丁是v18发布的.12.13.

CVE-2024-36104

这个序列中的第二个CVE条目, CVE-2024-36104 出版于2024年6月4日. The vulnerability was again described as a path traversal, and the OFBiz Jira issue description is “Better avoid special encoded characters sequences”. 尽管补丁由多次提交组成,但大部分修复是在 bc856f46f8添加了以下代码,以从URI中删除分号和url编码的句号.

                    字符串urfilter =新的URI(initialURI)
                            .normalize().toString()
                            .replaceAll(";", "")
                            .replaceAll("(?i)%2e", "");
                    if (!initialURI.equals(uRIFiltered)) {
                        Debug.logError("For security reason this URL is not accepted", MODULE);
                        throw new RuntimeException("For security reason this URL is not accepted");

该CVE在v18中进行了修补.12.14.

Two different example payloads for this vulnerability are shown below, 每个被实现的修复所剥离的序列对应一个. 这两种有效载荷也适用于受先前CVE-2024-32113影响的OFBiz安装, 因为漏洞具有相同的根本原因.

curl http://target: 8443 / webtools /控制/ forgotPassword /;/ProgramExport' -d "groovyProgram=throw+new+Exception('echo cmd输出:' id ").execute().text);" -vvv -k --path-as-is
curl http://target: 8443 / webtools /控制/ forgotPassword /%2e%2e/ProgramExport' -d "groovyProgram=throw+new+Exception('echo cmd输出:' id ").execute().text);" -vvv -k --path-as-is

CVE-2024-38856

这个序列中的第三个弱点, CVE-2024-38856,发表于2024年8月5日. This time, the vulnerability was described as an incorrect authorization issue. CVE的描述指出“如果满足某些先决条件,未经身份验证的端点可以允许执行屏幕的屏幕渲染代码(例如当屏幕定义没有显式检查用户的权限,因为它们依赖于端点的配置)。”.这句话更准确地描述了这个问题. As we’ll see in a moment, it also indicates the approach taken for the fix this time.

SonicWall的研究团队向OFBiz团队报告了这一漏洞 an excellent blog post 这很好地解释了根本原因,并将重点放在控制器-视图映射状态碎片上, 而不仅仅是触发它的方法. 令人惊讶的是,他们的博客文章报告说,根本不需要遍历或分号序列! A request to a path like / webtools /控制/ forgotPassword / ProgramExport 将导致控制器被设置为“forgotPassword”,视图映射被设置为“ProgramExport”.

此漏洞的有效负载示例如下所示.

curl http://target: 8443 / webtools /控制/ forgotPassword /ProgramExport' -d "groovyProgram=throw+new+Exception('echo cmd输出:' id ").execute().text);" -vvv -k

This payload also works for systems affected by CVE-2024-32113 and CVE-2024-36104, 因为三个人的根本原因是一样的.

The OFBiz Jira issue 此漏洞的标题为“为ProgramExport和EntitySQLProcessor添加权限检查”. That’s exactly what the fix does; the fix adds a permission check for ProgramExport and EntitySQLProcessor,以前的漏洞所针对的两个视图地图. The three lines below were added to both Groovy files associated with those view maps, 有效防止未经身份验证访问它们.

if (!security.hasPermission('ENTITY_MAINT', userLogin) {
    return
}

结果,这两种开发技术都不再可行. However, the underlying problem, 分割控制器-视图映射状态的能力, v18没有解决.12.15 patch.

Exploitation

To recap, 之前的三个漏洞都是由相同的底层问题引起的, 使控制器和视图映射状态不同步的能力. 任何补丁都没有完全解决这个缺陷. 在我们研究的时候, requestUri and overrideViewUri 变量仍然可以按照SonicWall博客文章中描述的方式去同步, albeit not to reach ProgramExport or EntitySQLProcessor. 我们的测试目标是v18.12.15、研究时可用的最新版本.

The 框架/ webtools /部件/ EntityScreens.xml file defines some EntityScreens that might be leveraged by an attacker.

$ grep 'script' 框架/ webtools /部件/ EntityScreens.xml