前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Solr DataImportHandler RCE

Apache Solr DataImportHandler RCE

作者头像
安恒网络空间安全讲武堂
发布2019-09-08 21:56:41
7460
发布2019-09-08 21:56:41
举报

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

0x01 通告

0x02 漏洞分析

从通告中来看,漏洞应该和DIH功能中的某个功能有关系,翻一翻DataImportHandler的手册,找到了疑似漏洞触发点,下面的代码功能是 ScriptTransformer 。

代码语言:javascript
复制
<dataConfig>
        <script><![CDATA[
                function CategoryPieces(row)    {
                    var pieces = row.get('category').split('/');
                    var arr = new java.util.ArrayList();
                    for (var i=0; i<pieces.length; i++) {
                       arr.add(pieces[i]);
                    }
                    row.put('categorypieces', arr);
                    row.remove('category');
                    return row;
                }
        ]]></script>
        <document>
                <entity name="e" pk="id" transformer="script:CategoryPieces" query="select * from X">
                ....                </entity>
        </document></dataConfig>

先去翻翻这个功能实现的代码,这里简单看看一些关键代码,代码jar包似乎就告诉我这个漏洞原因是什么了,我们看到了 javax.script.ScriptEngine; 。

Java从java 6开始就有一个能够解析javascript的引擎,我们可以看到小例子:

ζ jjs jjs> print("Hello World"); Hello World

当然这个JavaScript也是可以支持实例化相关java类,执行相关类的作用。

换到java代码实现是这样的。

import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class NashornEngineTest { public static void main(String[] args) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); String js ="var clzz= new java.lang.ProcessBuilder(\"/Applications/Calculator.app/Contents/MacOS/Calculator\");print(clzz);clzz.start()"; engine.eval(js); }}

看到下面的代码解析js是不是感觉和上面那部分代码很眼熟。大概的解析流程通过 initEngine 处理传入的JavaScript 代码,然后在解析 JavaScript 代码的时候导致解析 Java 代码,达到命令执行的目的。

0x03 漏洞复现

在Dataimport处填入payload

修复方案

值得注意的是,官方给出的临时修复方案并不能缓解漏洞,当把相应index core的配置文件置为空时,dataimport的时候只是获取不到默认的配置,但是依然能够通过这个接口发送PoC,漏洞也依然能够触发,解决办法是把相应配置文件中的dataimport requestHandler全部注释并重启Solr服务器,或者选择升级才能彻底关闭这个接口缓解漏洞。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档