漏洞简介
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端口
2.使用样例构造上传的configset
3.上传过程中触发断点
可以看到,正确识别到configset不值得信任(缺少身份认证)
Trust值为false
4.使用上传的configset为母版,创建新的configset
http://localhost:8983/solr/admin/configs?action=CREATE&name=evilconfigset4&baseConfigSet=2testConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true
无返回信息,未触发debug
5.在web控制台可以查看到,创建evilconfigset4成功
6.使用直接上传的configset(例如2testconfigset)创建collection会失败
7.使用以2testconfigset为母版,创建的evilconfigset4,创建collection,可以成功
8.后续可以利用创建的collection的内容,调用solr组件进行远程代码执行(这里不做分析)
二.8.6.3 版本修复分析
1.Debug运行8.6.3版本
2.进行攻击尝试,类似8.6.2版本,上传configset
3.触发断点
正确识别为不可信configset
4.使用上传的2testconfigset为母版,创建新的configset
http://localhost:8983/solr/admin/configs?action=CREATE&name=evilconfigset4&baseConfigSet=2testConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true
5.触发断点
正确识别为不可信configset(注意,在8.6.2版本中,以已上传的configset为母版创建新configset时,并不会触发检查)
6.同样可以创建configset成功
7.在web控制台,分别使用直接上传的configset(2testconfigset)以及创建的(evilconfigset4)新建collection
2testconfigset :
Evilconfigset4 :
均创建失败。