Apache Solr Deserialization 远程代码执行误差清静通告

宣布时间 2019-03-13

误差编号和级别


CVE编号:CVE-2019-0192 ,危险级别:高危 , CVSS分值:官方未评定


影响规模


受影响版本: 

Apache Solr 5.0.0 to 5.5.5

Apache Solr 6.0.0 to 6.6.5


误差概述


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


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


Apache Solr 中存储的资源是以 Document 为工具举行存储的。每个文档由一系列的 Field 组成 ,每个 Field 体现资源的一个属性。Solr 中的每个 Document 需要有能唯一标识其自身的属性 ,默认情形下这个属性的名字是 id ,在 Schema 设置文件中使用:<uniqueKey>id</uniqueKey>举行形貌。


该误差实质是ConfigAPI允许通过HTTP POST请求设置Solr的JMX服务器。攻击者可以通过ConfigAPI将其设置指向恶意RMI服务器 ,使用Solr的不清静反序列化来触发Solr端上的远程代码执行。


现在据统计 ,在全球规模内对互联网开放Apache Solr的资产数目多达15万台 ,其中归属中国地区的受影响资产数目为2万以上。


误差剖析


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


首先需要相识一下configAPI ,他主要功效是检索或修改设置。 GET认真检索 ,POST认真执行下令。通过传入set-property属性 ,结构恶意的数据 ,传入指向恶意的rmi服务器的链接 ,笼罩之前服务器的原设置 ,使得目的服务器与攻击者的恶意rmi服务器相连 ,攻击者可以使用ysoserial工具 ,通过rmi服务器向远端目的服务器发送下令 ,并在目的服务器上执行 ,实现远程下令执行。


误差触发点在JmxMonitoredMap.class中的newJMXConnectorServer函数中 ,此函数可以让服务器与新的rmi服务器相毗连 ,并且每次挪用此函数都会爆发一个差别的工具。以是当攻击者通过笼罩传入自己的rmi服务器地址 ,目的服务器就会与之相连 ,执行内部的下令。


代码如下:


尊龙凯时 - 人生就是搏!


复现如下:

下载Apache Solr 5.5.3版本作为靶机(注重 ,一定要使用jre7u25以下jre) ,执行solr -e techproducts -Dcom.sun.management.jmxremote指令开启服务。


使用ysoserial工具 ,执行Java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 12363 Jdk7u21 "calc"指令 ,监听12363端口。然后传入以下数据:


尊龙凯时 - 人生就是搏!


乐成弹出盘算器 ,如图:


尊龙凯时 - 人生就是搏!


修复建议


Apache Solr官方已经在Apache Solr 7.0 及之后版本修复了该误差 ,用户可以更新至Apache Solr 7.0 及之后版本:http://mirror.bit.edu.cn/apache/lucene/solr/。


Apache Solr官方已经宣布了SOLR-13301.patch 补丁 ,用户需要装置补丁后重新编译Solr ,补丁地址:https://issues.apache.org/jira/secure/attachment/12961503/SOLR-13301.patch。


参考链接

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