什么是 Apache Solr?
Apache Solr 是一个基于 Apache Lucene 的开源搜索平台,广泛应用于构建搜索引擎和数据分析应用。Solr 专为处理海量数据设计,性能高效,支持搜索、内容管理、自然语言处理等多种场景。
漏洞概述
影响范围:
- Solr 5.3.0 至 8.11.4
- Solr 9.7.0 及以下版本
这些版本的 PKIAuthenticationPlugin(默认启用)存在漏洞,可以通过在 API 路径末尾添加伪造的 URL 片段绕过身份验证。
配置与复现
认证配置文件 security.json 示例:
{
"authentication": {
"class": "solr.BasicAuthPlugin",
"credentials": {
"solr": "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="
},
"blockUnknown": false
},
"authorization": {
"class": "solr.RuleBasedAuthorizationPlugin",
"permissions": [
{
"name": "security-edit",
"role": "admin"
}
],
"user-role": {
"solr": "admin"
}
}
}
操作步骤:
-
启用身份验证插件:在配置文件中启用
BasicAuthPlugin和RuleBasedAuthorizationPlugin。 -
创建用户和角色:
- 用户名:
solr - 密码:
SolrRocks - 角色:
admin,具有security-edit权限。
- 用户名:
-
搭建测试环境: 使用以下
docker-compose.yaml快速搭建测试环境:
version: '3.7'
services:
solr:
image: solr:9.6.0
ports:
- "8983:8983"
volumes:
- ./security.json:/var/solr/data/security.json
-
将配置上传至 Zookeeper:
solr zk cp /var/solr/data/security.json zk:/security.json -z zoo1:2181 -
绕过身份验证:
- 通过构造以
/admin/info/key结尾的请求路径,可以绕过身份验证直接访问。
- 通过构造以
技术分析
漏洞核心:
PKIAuthenticationPlugin 插件在验证请求时,对以 /admin/info/key 结尾的请求路径未执行完整验证。通过构造特殊的请求路径,可以绕过所有身份验证逻辑。
关键代码分析:
doAuthenticate方法问题:- 修复前会直接检查路径是否以
/admin/info/key结尾,如果匹配则跳过所有验证。
- 修复前会直接检查路径是否以
- URI 处理问题:
- 请求路径中
:后的部分会被截断,从而绕过路径验证。
- 请求路径中
解决方案
- 升级 Solr:尽快升级到 9.7.1 或更高版本。
- 临时修复:关闭不必要的 API,确保只允许认证的请求访问关键数据。
相关patch:
官方公告【含具体攻击POC/EXP】: