Apache Solr 身份验证绕过漏洞(CVE-2024-45216)详解
什么是 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:
- https://issues.apache.org/jira/secure/attachment/13071024/SOLR-17417.patch
官方公告【含具体攻击POC/EXP】:
- https://issues.apache.org/jira/browse/SOLR-17417
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐