漏洞简介

Apache Solr 发布公告,旧版本的 ConfigSet API 中存在未授权上传漏洞风险,被利用可能导致 RCE (远程代码执行)。

受影响的版本

Apache Solr 6.6.0 -6.6.5

Apache Solr 7.0.0 -7.7.3

Apache Solr 8.0.0 -8.6.2

安全专家建议用户尽快升级到安全版本,以解决风险。

漏洞原理

Solr可运行在SolrCloud(分布式集群模式)和Standalone Server(独立服务器模式)两种模式下,当以SolrCloud模式运行时,可通过Configset API 操作Configsets,包括创建、删除等。

对于通过Configset API 执行UPLOAD时,如果启用了身份验证(默认未开启),且该请求通过了身份验证,Solr会为该configset的设置“trusted”,否则该配置集不会被信任,不被信任的configset无法创建collection。

但当攻击者通过UPLOAD上传configset后,再基于此configset CREATE configset时,Solr不会为这个新的configset进行信任检查,导致可以使用未经信任检查的新configset创建collection。

漏洞验证

一.在8.6.2版本中进行攻击尝试

1.Debug运行8.6.2版本,默认开启在8983端口

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_apache

2.使用样例构造上传的configset

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_solr_02

3.上传过程中触发断点

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_solr_03

可以看到,正确识别到configset不值得信任(缺少身份认证)

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_solr_04

Trust值为false

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_05

4.使用上传的configset为母版,创建新的configset

http://localhost:8983/solr/admin/configs?action=CREATE&name=evilconfigset4&baseConfigSet=2testConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_solr_06

无返回信息,未触发debug

5.在web控制台可以查看到,创建evilconfigset4成功

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_solr_07

6.使用直接上传的configset(例如2testconfigset)创建collection会失败

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_08

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_09

7.使用以2testconfigset为母版,创建的evilconfigset4,创建collection,可以成功

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_10

8.后续可以利用创建的collection的内容,调用solr组件进行远程代码执行(这里不做分析)

二.8.6.3 版本修复分析

1.Debug运行8.6.3版本

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_11

2.进行攻击尝试,类似8.6.2版本,上传configset

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_12

3.触发断点

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_solr_13

正确识别为不可信configset

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_apache_14

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_apache_15

4.使用上传的2testconfigset为母版,创建新的configset

http://localhost:8983/solr/admin/configs?action=CREATE&name=evilconfigset4&baseConfigSet=2testConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true

5.触发断点

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_16

正确识别为不可信configset(注意,在8.6.2版本中,以已上传的configset为母版创建新configset时,并不会触发检查)

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_17

6.同样可以创建configset成功

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_apache_18

7.在web控制台,分别使用直接上传的configset(2testconfigset)以及创建的(evilconfigset4)新建collection

2testconfigset :

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_apache_19

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_20

Evilconfigset4 :

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_apache_21

补天情报首发:Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)风险通告原理分析与验证_上传_22

均创建失败。