Featured image of post Apache ActiveMQ Jolokia 后台远程代码执行漏洞(CVE 2022 41678)

Apache ActiveMQ Jolokia 后台远程代码执行漏洞(CVE 2022 41678)


Apache ActiveMQ 是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。

ActiveMQ中,经过身份验证的用户默认情况下可以通过/api/jolokia/接口操作MBean,其中FlightRecorder可以被用于写Jsp WebShell,从而造成远程代码执行漏洞。

FlightRecorder存在于Jdk 11+,具体类名:jdk.management.jfr.FlightRecorderMXBeanImpl


影响范围

  • Apache ActiveMQ before 5.16.6
  • Apache ActiveMQ 5.17.0 before 5.17.4
  • Apache ActiveMQ 5.18.0 unaffected
  • Apache ActiveMQ 6.0.0 unaffected

环境构建

CVE-2022-41678目录下执行如下命令启动一个Apache ActiveMQ 5.17.3服务器:

1
docker compose up -d

docker启动环境

服务启动后,访问http://your-ip:8161/后输入账号密码adminadmin,即可成功登录后台。

访问activeMQ环境

原理分析

漏洞入口在【 http://localhost:8161/api/jolokia/】 ,⚠️注意需要带上Origin头才可以访问

添加Origin头

主要问题出在FlightRecorder这个Mbean,功能是记录内存,gc,调用栈等。 漏洞用到的方法主要是以下几个:

  • newRecording:新建记录
  • setConfiguration:更改配置
  • startRecording:开始录制
  • stopRecording:结束录制
  • copyTo:导出录制文件

漏洞思路是通过setConfiguration修改配置,把一些键名改成jsp代码,记录的数据就会包含该jsp代码,录制完成后,通过copyTo导出到web目录即可

代码位置在 jdk.management.jfr.FlightRecorderMXBeanImpl#setConfiguration

可控的代码位置

漏洞复现

首先,访问/api/jolokia/list这个API可以查看当前服务里所有的MBeans:

1
2
# 注意需要带上Origin头才可以访问
Origin:http://192.168.1.3

BP抓包修改

这其中有两个点可以被用来执行任意代码。

途径一

第一个方法是使用org.apache.logging.log4j.core.jmx.LoggerContextAdminMBean,这是由Log4j2提供的一个MBean。

Log4j2提供的MBean

攻击者使用这个MBean中的setConfigText操作可以更改Log4j的配置,进而将日志文件写入任意目录中。

可控函数

使用【POC】脚本来复现完整的过程:

1
pyhon poc.py -u admin -p admin http://your-ip:8161

poc执行成功并写入shell

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

访问写入的shell

这个方法受到ActiveMQ版本的限制,因为Log4j2是在5.17.0中才引入Apache ActiveMQ。

途径二

第二个可利用的Mbean是jdk.management.jfr.FlightRecorderMXBean

FlightRecorder的具体使用

FlightRecorder是在OpenJDK 11中引入的特性,被用于记录Java虚拟机的运行事件。利用这个功能,攻击者可以将事件日志写入任意文件。

使用【POC】脚本来复现完整的过程(使用--exploit参数指定使用的方法):

1
python poc.py -u admin -p admin --exploit jfr http://localhost:8161

poc成功执行可访问webshell

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

确认存在该漏洞

修复建议

附录

参考文献

版权信息

本文原载于 Ranch’s Blog,遵循 CC BY-NC-SA 4.0 协议,复制请保留原文出处。

根据CC BY-NC-SA 4.0协议授权,转载请在留言板告知🔔
载入天数...载入时分秒...
🤝本博客仅用于记录个人学习和成长。所有内容仅为个人观点,不代表任何团体或组织的立场。如有疑问,欢迎联系!
使用 Hugo 构建
主题 StackJimmy 设计