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 安全配置步骤

  1. 创建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"
    }
  }
}
  1. 使用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修改

  1. 删除了冒号处理逻辑:
int idx = path.indexOf(':');
if (idx > 0) {
    // save the portion after the ':' for a 'handler' path parameter
    path = path.substring(0, idx);
}
  1. 修改了路径解析逻辑:
// 原始代码
idx = path.indexOf('/', 1);

// 修改后
int idx = path.indexOf('/', 1);

4.2 漏洞触发流程

  1. 请求分发阶段

    • 请求首先由org.apache.solr.servlet.SolrDispatchFilter#dispatch处理
    • 然后经过org.apache.solr.servlet.SolrDispatchFilter#authenticateRequest
  2. 认证阶段

    • 进入org.apache.solr.security.AuthenticationPlugin#authenticate
    • 最终到达org.apache.solr.security.PKIAuthenticationPlugin#doAuthenticate
  3. 路径解析阶段

    • org.apache.solr.servlet.HttpSolrCall#call中解析响应被分割前的路径

4.3 关键机制分析

  1. 路径解析差异

    • 认证插件检查完整路径(包含:/admin/info/key
    • 实际业务逻辑处理截取冒号前的路径
    • 导致认证和业务处理路径不一致
  2. SolrAuth头的作用

    • org.apache.solr.servlet.SolrDispatchFilter#authenticateRequest中:
      • 检查header是否为PKIAuthenticationPlugin.HEADERPKIAuthenticationPlugin.HEADER_V2
      • 强制使用PKIAuthenticationPlugin而非BasicAuthPlugin
    • PKIAuthenticationPlugin.HEADER值为"SolrAuth"
    • PKIAuthenticationPlugin.HEADER_V2值为"SolrAuthV2"
  3. 冒号的作用

    • 触发路径分割逻辑
    • 使认证和业务逻辑看到不同的路径

5. 漏洞利用扩展

5.1 可利用的API接口

  • 获取敏感信息:/admin/info/properties
  • 修改core配置:/solr/[core]/config
  • 执行管理操作:/admin/cores

5.2 潜在危害

  1. 信息泄露:

    • 获取系统配置
    • 读取索引数据
  2. 权限提升:

    • 修改安全配置
    • 执行任意管理操作
  3. 数据篡改:

    • 修改索引数据
    • 更改系统设置

6. 防护建议

  1. 升级到安全版本:

    • Apache Solr ≥ 8.11.4
    • Apache Solr ≥ 9.7.0
  2. 临时缓解措施:

    • 禁用PKIAuthenticationPlugin
    • 配置网络ACL限制访问
  3. 安全监控:

    • 监控异常请求模式
    • 特别关注包含:/admin/info/key的请求

7. 技术总结

该漏洞本质是由于路径解析不一致导致的认证绕过:

  1. 认证插件检查完整路径
  2. 业务逻辑处理截取后的路径
  3. 通过特殊构造的路径后缀和请求头强制使用特定认证插件

漏洞利用需要同时满足三个条件:

  1. 使用PKIAuthenticationPlugin进行认证
  2. URL包含特定后缀:/admin/info/key
  3. 请求中包含SolrAuth
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 配置文件: 使用Solr命令加载配置文件: 3. 漏洞复现 3.1 漏洞利用POC 3.2 利用特征 在URL结尾添加 :/admin/info/key 必须包含 SolrAuth 请求头 可绕过认证访问所有受保护的API接口 4. 漏洞原理深度分析 4.1 关键代码修改点 4.1.1 PKIAuthenticationPlugin.java修改 官方修复commit中删除了以下关键代码: 这段代码原本会检查请求URI是否以 PublicKeyHandler.PATH (即 /admin/info/key )结尾,如果是则直接通过认证。 4.1.2 HttpSolrCall.java修改 删除了冒号处理逻辑: 修改了路径解析逻辑: 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 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 头