基础介绍
公开时间
2023-10-25
影响范围
万级
影响版本
Apache ActiveMQ < 5.18.3
Apache ActiveMQ < 5.17.6
Apache ActiveMQ < 5.16.7
Apache ActiveMQ < 5.15.16
影响组件
ActiveMQ(用Java编写)是一个由Apache开发的开源协议,它实现了面向消息的中间件(MOM)。它的主要功能是在不同的应用程序之间发送消息,还包括STOMP、Jakarta Messaging (JMS)和OpenWire等附加特性。
漏洞描述
Java OpenWire协议编组器容易受到远程代码执行的攻击。此漏洞可能允许通过网络访问基于Java的OpenWire代理或客户端的远程攻击者,通过操纵OpenWire协议中的序列化类类型来运行任意shell命令,导致客户端或代理(分别)实例化上的任何类。建议用户将经纪商和客户端升级到版本5.15.16、5.16.7、5.17.6或5.18.3以解决此问题。
FOFA
app=“APACHE-ActiveMQ”
Apache ActiveMQ服务器TCP端口默认为61616。
POC
https://github.com/X1r0z/ActiveMQ-RCE
漏洞分析
Apache ActiveMQ OpenWire协议远程代码执行漏洞与OpenWire命令解组时可抛出类类型验证有关。
OpenWire是一种二进制协议,专门设计用于处理面向消息的中间件。它充当ActiveMQ的本机连接格式,ActiveMQ是一个广泛使用的开源消息传递和集成平台,与其他格式相比,OpenWire的二进制格式提供了几个优势,比如它对带宽的有效利用以及支持多种消息类型的能力。这些特性使其成为需要可靠和高性能消息传递系统的企业和组织的理想选择。
基于补丁差异,我们可以看到validateIsThrowable方法已经包含在BaseDataStreamMarshall类中。
当编组器无法验证Throwable (Java中表示异常和错误的对象)的类类型时,它可能会意外地创建并执行任何类的实例。这将导致RCE漏洞允许攻击者在服务器或应用程序上执行任意代码。因此,必须确保始终验证Throwable的类类型,以防止潜在的安全风险。
JAVA漏洞分析流程