漏洞描述

ActiveMQ 是 Apache 软件基金会下的一个开源消息驱动中间件软件。Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。ActiveMQ 5.0 及以后版本默认集成了jetty。在启动后提供一个监控 ActiveMQ 的 Web 应用。

漏洞原理其实非常简单,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求),可以MOVE到admin目录下直接GETShell。

 

影响版本

Apache Group ActiveMQ 5.0.0 – 5.13.2

 

CVE编号

CVE-2016-3088

 

复现过程

下载地址:http://archive.apache.org/dist/activemq/5.10.1/apache-activemq-5.10.1-bin.tar.gz

解压:tar -xzf apache-activemq-5.10.1-bin.tar.gz

启动:./activemq start

[root@server120 conf]# netstat -antlp | grep 8161

tcp        0      0 :::8161                     :::*                        LISTEN      23502/java

默认认证已经开启,配置文件jetty.xml

    <bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint">

        <property name="name" value="BASIC" />

        <property name="roles" value="user,admin" />

        <!-- set authenticate=false to disable login -->

        <property name="authenticate" value="true" />

    </bean>

authenticate设置为false,可以未授权访问。

用户名密码的配置文件jetty-realm.properties

默认为:

admin: admin, admin

user: user, user

这里必须将admin账户修改为强密码。否则就可以利用未授权访问或者默认弱密码上传Webshell。

 

ActiveMQ 中的 FileServer 服务允许用户通过 HTTP PUT 方法上传文件到指定目录,用户可以上传文件到指定目录,该路径在 conf/jetty.xml 中定义

                        <bean class="org.eclipse.jetty.webapp.WebAppContext">

                            <property name="contextPath" value="/fileserver" />

                            <property name="resourceBase" value="${activemq.home}/webapps/fileserver" />

                            <property name="logUrlOnStart" value="true" />

                            <property name="parentLoaderPriority" value="true" />

                        </bean>

 

上传SHELL

这里我随便上传一个文件

[root@server120 apache-activemq-5.10.1]# cat webapps/fileserver/1.jsp

hehe123

这里首先爆上传目录

可以看到上传目录为/tmp/apache-activemq-5.10.1webapps/fileserver/

然后PUT上传cmd.jsp

fileserver目录是不解析jsp的,因为刚才通过爆路径获取到了绝对路径,这里MOVE到admin目录下。

然后执行命令

 

上传公钥

生成公钥并上传

然后移动到authorized_keys

 

上传定时任务

[root@server120 ~]# cat /tmp/xxoo.txt^M

123

 

修复建议

ActiveMQ在5.12.x~5.13.x版本中,已经默认关闭了fileserver这个应用(你可以在conf/jetty.xml中开启);

在5.14.0版本以后,彻底删除了fileserver应用。