Apache Solr 身份认证绕过漏洞 (CVE-2024-45216) 分析与新发现
字数 1937 2025-08-22 12:22:24
Apache Solr 身份认证绕过漏洞 (CVE-2024-45216) 深度分析与利用指南
1. 漏洞概述
Apache Solr 是Apache Lucene项目的开源企业搜索平台。CVE-2024-45216是一个身份认证绕过漏洞,当Solr实例使用PKIAuthenticationPlugin进行鉴权时,攻击者可以在任何Solr API URL路径末尾构造特殊结尾来跳过身份验证。
影响版本
- Apache Solr < 8.11.4
- Apache Solr < 9.7.0
2. 漏洞环境搭建
2.1 基础环境要求
- SolrCloud模式集群环境
- ZooKeeper服务
- 启用PKIAuthenticationPlugin鉴权
2.2 安全配置步骤
- 创建
security.json配置文件:
{
"authentication": {
"class": "solr.BasicAuthPlugin",
"credentials": {
"solr": "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="
}
},
"authorization": {
"class": "solr.RuleBasedAuthorizationPlugin",
"permissions": [{
"name": "security-edit",
"role": "admin"
}],
"user-role": {
"solr": "admin"
}
}
}
- 使用Solr命令加载配置文件:
bin/solr zk cp ./security.json zk:security.json -z localhost:2181
3. 漏洞复现
3.1 漏洞利用POC
GET /solr/admin/info/properties:/admin/info/key HTTP/1.1
Host: 127.0.0.1:8983
SolrAuth: 11
Connection: close
3.2 利用特征
- 在URL结尾添加
:/admin/info/key - 必须包含
SolrAuth请求头 - 可绕过认证访问所有受保护的API接口
4. 漏洞原理深度分析
4.1 关键代码修改点
4.1.1 PKIAuthenticationPlugin.java修改
官方修复commit中删除了以下关键代码:
String requestURI = request.getRequestURI();
if (requestURI.endsWith(PublicKeyHandler.PATH)) {
assert false : "Should already be handled by SolrDispatchFilter.authenticateRequest";
numPassThrough.inc();
filterChain.doFilter(request, response);
return true;
}
这段代码原本会检查请求URI是否以PublicKeyHandler.PATH(即/admin/info/key)结尾,如果是则直接通过认证。
4.1.2 HttpSolrCall.java修改
- 删除了冒号处理逻辑:
int idx = path.indexOf(':');
if (idx > 0) {
// save the portion after the ':' for a 'handler' path parameter
path = path.substring(0, idx);
}
- 修改了路径解析逻辑:
// 原始代码
idx = path.indexOf('/', 1);
// 修改后
int idx = path.indexOf('/', 1);
4.2 漏洞触发流程
-
请求分发阶段:
- 请求首先由
org.apache.solr.servlet.SolrDispatchFilter#dispatch处理 - 然后经过
org.apache.solr.servlet.SolrDispatchFilter#authenticateRequest
- 请求首先由
-
认证阶段:
- 进入
org.apache.solr.security.AuthenticationPlugin#authenticate - 最终到达
org.apache.solr.security.PKIAuthenticationPlugin#doAuthenticate
- 进入
-
路径解析阶段:
- 在
org.apache.solr.servlet.HttpSolrCall#call中解析响应被分割前的路径
- 在
4.3 关键机制分析
-
路径解析差异:
- 认证插件检查完整路径(包含
:/admin/info/key) - 实际业务逻辑处理截取冒号前的路径
- 导致认证和业务处理路径不一致
- 认证插件检查完整路径(包含
-
SolrAuth头的作用:
- 在
org.apache.solr.servlet.SolrDispatchFilter#authenticateRequest中:- 检查header是否为
PKIAuthenticationPlugin.HEADER或PKIAuthenticationPlugin.HEADER_V2 - 强制使用PKIAuthenticationPlugin而非BasicAuthPlugin
- 检查header是否为
PKIAuthenticationPlugin.HEADER值为"SolrAuth"PKIAuthenticationPlugin.HEADER_V2值为"SolrAuthV2"
- 在
-
冒号的作用:
- 触发路径分割逻辑
- 使认证和业务逻辑看到不同的路径
5. 漏洞利用扩展
5.1 可利用的API接口
- 获取敏感信息:
/admin/info/properties - 修改core配置:
/solr/[core]/config - 执行管理操作:
/admin/cores
5.2 潜在危害
-
信息泄露:
- 获取系统配置
- 读取索引数据
-
权限提升:
- 修改安全配置
- 执行任意管理操作
-
数据篡改:
- 修改索引数据
- 更改系统设置
6. 防护建议
-
升级到安全版本:
- Apache Solr ≥ 8.11.4
- Apache Solr ≥ 9.7.0
-
临时缓解措施:
- 禁用PKIAuthenticationPlugin
- 配置网络ACL限制访问
-
安全监控:
- 监控异常请求模式
- 特别关注包含
:/admin/info/key的请求
7. 技术总结
该漏洞本质是由于路径解析不一致导致的认证绕过:
- 认证插件检查完整路径
- 业务逻辑处理截取后的路径
- 通过特殊构造的路径后缀和请求头强制使用特定认证插件
漏洞利用需要同时满足三个条件:
- 使用PKIAuthenticationPlugin进行认证
- URL包含特定后缀
:/admin/info/key - 请求中包含
SolrAuth头