记一次失败的CVE-2021-44548分析

前言

之前在zsxq看到有师傅发solr的洞:CVE-2021-44548,今天看了一下,但是好像危害不大,不过还是以学习为主看一波

描述:
Apache Solr 的 DataImportHandler 中的一个不正确的输入验证漏洞允许攻击者提供 Windows UNC 路径,导致从 Solr 主机向网络上的另一台主机进行 SMB 网络调用。

https://solr.apache.org/security.html#cve-2021-44548-apache-solr-information-disclosure-vulnerability-through-dataimporthandler

https://issues.apache.org/jira/browse/SOLR-15826

影响版本

version < 8.11.1(windows)

环境搭建

下载solr-8.11.0

然后bin目录下

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

然后这里需要创建一个SolrCore(需要命令行创建!)

./solr.cmd create_core -c core1

然后在solr-8.11.0dist目录中

wget https://mirror.shileizcc.com/Solr/mysql-connector-java-5.1.42-bin.jar
wget https://mirror.shileizcc.com/Solr/solr-dataimporthandler-7.3.1.jar
wget https://mirror.shileizcc.com/Solr/solr-dataimporthandler-extras-7.3.1.jar

solr-8.11.0serversolrcore1confsolrconfig.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_Solrsolr-8.11.0dist/" regex="mysql-connector-java-5.1.42-bin.jar" />
 <lib dir="D:临时Apache_Solrsolr-8.11.0contrib/dataimporthandler/lib" regex=".*.jar" />
 <lib dir="D:临时Apache_Solrsolr-8.11.0contrib/dataimporthandler-extras/lib" regex=".*.jar" />
 <lib dir="D:临时Apache_Solrsolr-8.11.0dist/" regex="solr-dataimporthandler.*.jar" />

重启solr即可

漏洞分析

这里补丁判断了resource是否开头为

记一次失败的CVE-2021-44548分析

再看一下描述

记一次失败的CVE-2021-44548分析

所以这个漏洞就是通过resource为ip,然后solr就回去请求该unc路径造成信息泄露什么的

然后下一步找触发点

在dataimport这里可以看到能加载data-config.xml

记一次失败的CVE-2021-44548分析

点一下reload,看一下请求路由

http://localhost:8983/solr/core1/dataimport?_=1640242938294&command=reload-config&indent=on&wt=json

可以发现处理请求的地方在DataImportHandler#handleRequestBody

其实这个地方根据之前写的solrconfig.xml也能看到

记一次失败的CVE-2021-44548分析

这里发现如果传入的command=show-config并且传入config不为空则有一个openResource操作,且参数可控

记一次失败的CVE-2021-44548分析

跟入solr-core-8.11.0.jar!orgapachesolrcoreSolrResourceLoader.openResource

记一次失败的CVE-2021-44548分析

这里的342行

this.getInstancePath()得到的路径为D:Apache_Solrsolr-8.11.0serversolrcore1

再执行resolve("conf")变成,D:Apache_Solrsolr-8.11.0serversolrcore1conf

再执行resolve(resource)时,这里的WindowsPathType变成了UNC

记一次失败的CVE-2021-44548分析

resolve逻辑判断WindowsPathType是否为绝对路径或UNC路径,是则直接返回参数

记一次失败的CVE-2021-44548分析

所以只要resource以开头就能使inConfigDir完全可控,在Files.exists中就会去请求windows的unc路径,这里用dnslog代替了

记一次失败的CVE-2021-44548分析

本来想试一下能不能任意文件读,但是这里会处理..然后判断开头是否为SolrCore的路径,所以只能读SolrCore下的文件,要么就开启-Dsolr.allow.unsafe.resourceloading=true

记一次失败的CVE-2021-44548分析

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

太菜了不知道怎么扩大危害

本文转载自https://xz.aliyun.com/t/10725,只做本站测试使用,本文观点不代表安强科技社区立场。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月15日 下午5:09
下一篇 2022年3月15日 下午5:31

相关推荐

发表回复

您的电子邮箱地址不会被公开。