CVE-2022-41678 Apache ActiveMQ Jolokia RCE
CVE-2022-41678 Apache ActiveMQ Jolokia RCE
ActiveMQ的漏洞最近也有几个,但是因为我已经看到有师傅分析了自己也就没细看,想着后面学一下思路,但是后来就忘了这档子事了,正好昨天又公布了这个去年的老洞,就一口气都写一个学习笔记罢了。(主要是activemq这个产品并没有整体学一遍,正好也简单学一学。
此外,对于漏洞官方的细节非常详尽,请看这里。
影响版本
Apache ActiveMQ
< 5.16.6
5.17.0 < Apache ActiveMQ
< 5.17.4
前置知识
在Apache ActiveMQ
中使用Jolokia API
时,客户端发送的JSON
请求格式依赖于你想执行的具体操作。Jolokia
支持多种操作,包括读取MBean
属性、执行MBean
操作、写入MBean
属性等。
下面介绍jolokia
中的一些基本操作。
读取 MBean 属性
1 |
|
执行 MBean 操作
1 |
|
写入 MBean 属性
1 |
|
获取所有 MBeans 的列表
1 |
|
好了有了以上内容就足够我们分析本次漏洞了。
漏洞分析
阿里云的情报都说了是Jolokia
出的漏洞,自然也就直接diff看一下修复(真不是因为我懒
这里就不得不说千万别下5.17,直接用5.16相关版本,环境大坑,我弄了很久。
首先通过web.xml
定位到jolokia
的路径和其使用的servlet
。
先分析一下org.jolokia.http.AgentServlet
中的内容:
这里判断了如果你的Origin
不符合条件,那么就直接退出,所以访问的时候加上Origin
头。
加上头之后就能成功访问这些东西了,也就是前面前置知识里那样。
通过了解前置知识我们知道了,通过Jolikia
可以对MBean
进行操作,MBean
时JMX
中的核心部分,通过MBean
可以将JDK级别的服务以接口的方式对外暴露,提供很多功能。
在Java11
中,新增了一个MBean
:jdk.management.jfr.FlightRecorderMXBeanImpl
对于这个MBean
官方也有详细的介绍,想看的师傅可以移步FlightRecorderMXBean (Java SE 11 & JDK 11 ),我在这里就简单介绍一下。
newRecording方法用来创建一个新的记录,但是并不会启动它:
1 |
|
创建一个录制后并不会开始,要通过startRecording
方法来启动这个录制,其中接受的参数就是前面返回的参数:
1 |
|
有启动自然也要停止,通过stopRecording
方法停止录制:
1 |
|
但是这个开始和结束并不能将webshell
地内容放进去,所以我们还需要用setConfiguration
将webshell
的内容以配置的形式写入,那么配置从哪里来呢,就从getConfigurations
来咯:
1 |
|
copyTo这个方法用来将录制的内容写入指定的文件,也就是我们本次漏洞的最后一步,写入JSP
1 |
|
官方也写得很明白,在使用的时候这样写就行了:
那么利用方式也很清晰了:创建录制–设置配置–启动录制–结束录制–写入文件
至于录制的内容就是我们要写入的shell了。
那么就开始吧,首先新建一个录制,不需要接受参数,所以我也没加,返回值中的value
就是id
值:
1 |
|
然后获取配置,看看是什么样的,注意这里用read
:
1 |
|
修改,加入webshell
:
写入,根据方法接受的参数,第一个是id
也就是那个1,第二个就是修改好的配置文件内容:
1 |
|
开始&结束录制:
1 |
|
1 |
|
导出文件:
访问一下验证:
总结
感觉每次有一些底层的大更新有新特性的时候都会出一些安全问题,这次是ActiveMQ 5.16.x
开始支持Java11,所以可以从这些方面入手,看看新特性能不能高些事情。
此外这个漏洞的利用方式不止JDK的MBean
一种,还可以利用一些第三方的MBean
来getshell,具体的方式就请师傅们自己研究下啦~