本仓库是一份指南,包含如何利用 CVE-2023-46604 的示例。
该漏洞利用利用了反射的机制来实例化异常类,通过一个恶意命令——该命令实际上并非合法命令,而是将异常类设置为一个用于加载 Bean 的 Spring 类,并将字符串构造参数设置为一个 URL,从该 URL 下载包含 Spring Bean 定义的 XML 文件。
这个 Spring Bean 实际上是一个 java.lang.ProcessBuilder,它将能够以运行 Java Active MQ 客户端或服务器的用户的相同权限来执行任意 bash 命令。
我希望可以用 Python 代码建立 HTTP 连接,但据我所见,Spring Bean 加载器出于某种原因会发起两次 HTTP 调用,而我对 Java 中的多线程编程比对 Python 更熟悉
此漏洞利用针对的是连接到 broker 服务器的 ActiveMQ 客户端,该服务器实际上是一个恶意服务器,会使该客户端面临远程代码执行的风险。
漏洞利用分为两个进程:
该方案已在 Python 3.6 和 Java 17 环境下测试通过。
编译 Java 项目:
cd activemq-exploit
mvn clean package
使用 cd .. 返回项目根目录,并运行 python scripts/client_exploit.py
在另一个终端中,运行 Java 代码:
cd activemq-exploitjava -jar target/activemq-exploit-1.0-SNAPSHOT.jar服务器漏洞利用会连接到 ActiveMQ 服务器 broker,并发送恶意命令。 该方式仅在 ActiveMQ Artemis 2.18 上使用过,但未能成功利用该漏洞, 因为 Artemis 并未打包 Spring,而目前已知的 远程代码执行 漏洞利用方式 是通过一个用于加载 Spring Bean 的 Spring 类来实现的。
不过,scripts/server_exploit.py 中的 Python 脚本所做的与客户端漏洞利用相同,只是连接的是服务器。
它缺少身份验证,因此可能需要对 Open Wire 握手进行适配。