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


京公网安备11010802024551号