CVE-2023-51467 Apache OFBiz 未授权远程代码执行漏洞

漏洞信息

漏洞名称:CVE-2023-51467 Apache OFBiz 未授权远程代码执行漏洞

漏洞介绍:在 ofbiz 18.12.10 版本官方仍未修复权限绕过漏洞,导致攻击者能够利用此漏洞绕过权限并且配合后台代码执行来获取远程服务器权限。

影响应用:Apache Ofbiz <18.12.11

漏洞分析

下载 18.12.10 和 18.12.11 进行对比,看到 LoginWorker.java 存在变更:

image

checkLogin 函数的变更就是用 UtilValidate.isEmpty替换掉 == null,看了下UtilValidate.isEmpty,没有什么危险的地方,就还是判断是否空值。

该文件还有 login函数存在变更:

1
requirePasswordChange ? "requirePasswordChange" : "error" => "error"

image

从两个值变成了一个固定的 error,从上面的代码可以看到,这个值是用户可控的:

1
boolean requirePasswordChange = "Y".equals(request.getParameter("requirePasswordChange"));

返回去看 checkLogin 函数,检测登陆的,可以看到会返回两种,success肯定就表示登陆成功或已登陆了。

image

只要这个 if 条件不满足,就可以然后 success:

1
2
3
if (username == null || (password == null && token == null) || "error".equals(login(request, response))) {
return "error";
}

或的条件,并且 username、password、token 都是可控的,根据上面的 login 函数也可以不返回 error :

image

构造如下请求即可实现绕过:

1
https://localhost:8443/webtools/control/ProgramExport?USERNAME=x&PASSWORD=y&requirePasswordChange=Y

其 RCE 是后台提供的一个可以执行自定义 groovy 脚本的功能,做了一些简单的黑名单,不过 execute() 这个命令执行的没有被禁止,有些简单的命令被过滤可以使用 reverse() 进行字符串反转绕过,p 牛也给出了有回显的 payload ,groovy 的异常报错会出现在响应中,那么就将命令执行的结果保存导异常中即可进行回显:

1
throw new Exception("id".execute().text);

CVE-2023-51467 Apache OFBiz 未授权远程代码执行漏洞
https://liancccc.github.io/2023/11/15/技术/漏洞分析/CVE-2023-51467/
作者
守心
发布于
2023年11月15日
许可协议