安全扫描失败无法上传_Apache Solr 未授权上传(RCE)漏洞的原理分析与验证

漏洞简介

Apache Solr 发布公告,旧版本的ConfigSet API 中存在未授权上传漏洞风险,被利用可能导致 RCE (远程代码执行)。

受影响的版本:

  • Apache Solr6.6.0 -6.6.5

  • Apache Solr7.0.0 -7.7.3

  • Apache Solr8.0.0 -8.6.2

安全专家建议用户尽快升级到安全版本,以解决风险。

漏洞原理

Solr 可运行在 SolrCloud(分布式集群模式)和 StandaloneServer(独立服务器模式)两种模式下,当以 SolrCloud 模式运行时,可通过Configset API 操作 Configsets,包括创建、删除等。

对于通过 Configset API 执行 UPLOAD 时,如果启用了身份验证(默认未开启),且该请求通过了身份验证,Solr 会为该 configset 的设置“trusted”,否则该配置集不会被信任,不被信任的 configset 无法创建collection。

但当攻击者通过 UPLOAD 上传 configset 后,再基于此configsetCREATE configset 时,Solr 不会为这个新的 configset 进行信任检查,导致可以使用未经信任检查的新 configset 创建 collection。

漏洞验证

一、在8.6.2版本中进行攻击尝试

1、Debug 运行8.6.2版本,默认开启在8983端口

96fa9c3d015e4a19f3bdb01bf2e4654f.png

2、使用样例构造上传的 configset2240ec9c79e46efdbf3c604ccc8121b8.png

3、上传过程中触发断点

afe9d6f4aadf05b139bbfb9dbaa81582.png

可以看到,正确识别到 configset 不值得信任(缺少身份认证)

108eba939b453ed6d23b75f263c5f8c8.png

Trust 值为 false

ad4b6895c9fdfb11eb7b85f03d600d1b.png

4、 使用上传的 configset 为母版,创建新的 configset

http://localhost:8983/solr/admin/configs?action=CREATE&name=evilconfigset4&baseConfigSet=2testConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true

2c81cc85d88161f17094b3a0e153ad70.png

无返回信息,未触发 debug

5、 在 web 控制台可以查看到,创建 evilconfigset4 成功

314cf00652abfa7bb06004c86e4b1edf.png

6、 使用直接上传的 configset(例如2testconfigset)创建 collection 会失败

8b0deb2fcad8b3a63d1053394a16054b.png

78da5d85cbbed12deea16c47071d7624.png

7、 使用以 2testconfigset 为母版创建的 evilconfigset4,创建collection,可以成功

0dd3ddaf65ce9e0cc8f1470cc2d651ef.png

8、 后续可以利用创建的 collection 的内容,调用solr组件进行远程代码执行(这里不做分析)

二、 8.6.3 版本修复分析

1、 Debug 运行 8.6.3 版本

b6a50d5b80b35cf03aa5ec90c03d24e3.png

2、进行攻击尝试,类似 8.6.2 版本,上传 configset

94de834bb6d977ec0dc14b5d7198f046.png

3、触发断点

6dc6fe35d2ebf0531bbf00546c513519.png

正确识别为不可信 configset

942dc993f74faaf2f215ece68c687757.png

98cda46e208b0fd82c1136b03e4ce2c4.png

4、 使用上传的 2testconfigset 为母版,创建新的 configset

http://localhost:8983/solr/admin/configs?action=CREATE&name=evilconfigset4&baseConfigSet=2testConfigSet&configSetProp.immutable=false&wt=xml&omitHeader=true

5、触发断点

6f1a50cf28cf23cc50f06f963dca5fbf.png

正确识别为不可信 configset(注意,在8.6.2版本中,以已上传的 configset 为母版创建新 configset 时,并不会触发检查)

c16f447077b3c074e9c0b4f17092c845.png

6、同样可以创建 configset 成功

05a5932332e17ce0d44bd0b3b5408a6b.png

7、 在 web 控制台,分别使用直接上传的 configset(2testconfigset)以及创建的(evilconfigset4)新建 collection

2testconfigset:

642a9d99572f870e7d958033bd2a5247.png

a80bdb963aa0a63955e03955d481670a.png

Evilconfigset4 :

5964c999f1884bddd7a7f53fec499746.png

d32a293a299f2a1da6d3a512cd15f5e7.png

均创建失败。

参考

  • https://issues.apache.org/jira/secure/attachment/13012410/SOLR-14663.patch

  • https://issues.apache.org/jira/browse/SOLR-14663

  • https://github.com/apache/lucene-solr/commit/8f2f80bbb3c35fef036dce3162f4f03bf465e5f2

推荐阅读

Netlogon 特权提升漏洞(CVE-2020-1472)原理分析与验证

QEMU CVE-2020-14364 漏洞分析(含 PoC 演示)

题图:Pixabay License

本文由奇安信代码安全实验室原创。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

精彩推荐

972f214abab0ddf8826bac8a62a22b06.png3e5668c73c138c1f1049d0c7dc277dc8.png6ba5a7e24ee29586fb7c32b741608dbb.png

9191077282592c40c947e00f82c563a2.pnged5311c328271d31682662c9650bf2a6.png5e5d0473df312aa32d026a216407620b.png

92b866e00539dc9a233cf657e6e63b3b.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php session页面传值,PHP session在页面间传递的问题

PHP session在页面间传递的问题:前提: 使用codeIgniter的框架, 使用PHP自带的session1. 在纯apache服务器上没有问题2. 在Nginx的apache模式下, 独立于codeIgniter框架外的页面无问题3. 在Nginx的apache模式下, 置于codeIgniter框架内的页面, 页面间session的传递有问题, 即一个…

html5怎么改为vue_Vue实战——编程式导航打开新窗口,登录状态本地存储

近日来,我陆续的分享了vue相关的系列文章,以新闻列表项目为载体,实战的方式介绍了vue及其周边的技术。本文承接前文,不断通过项目迭代的方式继续分享vue相关的知识。目前Vue实战系列文章已形成了目录,各位感兴趣的朋友…

python转cpp_python转c工具

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! compute.proto # python_out目录指定 xxxx_pb2.py的输出路径,我们指定为. 当前路径# grpc_pytho…

80端口为什么要备案_搞网站的你,不了解一下共享虚拟主机和备案问题

正文共:1474字 14图,预估阅读时间:4 分钟今天分享的这一切要从域名备案说起。先科普一下,平时我们访问网站都是用域名访问的,通过DNS服务器将域名解析为IP地址(你知道上网时输入的URL是怎么解析成IP地址的吗&#xff1…

jqprint获取打印页数_高年级应用题40道,假期快给孩子打印练习吧!(含答案)...

1.王爷爷家养的4头奶牛每个星期产奶896千克,平均1头奶牛每天产多少奶呢?2.4辆汽车3次运水泥960袋,平均每辆汽车每次运水泥多少袋?3.水波小学每间教室有3个窗户,每个窗户安装12块玻璃,9间教室一共安装多少块…

cstring移除指定字符串_从String中移除空白字符的多种方式!?差别竟然这么大!...

作者 | Hollis来源 | Hollis字符串,是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中的空格…

matlab 遗传优化算法_转载 | 遗传算法解决TSP问题的MATLAB实现

问题定义:巡回旅行商问题给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短。TSP问题也称为货郎担问题,是一个古老的问题。最早可以追溯到1759年Euler提出的骑士旅行的问题。1…

php 如何配置 redis,php 如何设置redis

php设置redis的方法:首先安装redis服务及PHP redis驱动;然后打开php.ini文件;接着增加内容为“extensionredis.so”;最后重启php-fpm或apache即可。PHP 设置使用 Redis安装开始在 PHP 中使用 Redis 前, 我们需要确保已…

java数组有跨类建立对象_Java性能优化的45个细节(珍藏版)

点击上面 蓝色字体关注我们技术 / 架构 / 职场 / 面试 关注即送:4000G 架构师视频来源:http://t.cn/EiP42VF在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地…

java 数据纠错,纠错码简介

纠错码是个什么东西引出网络中的通信基于TCP和UDP两个通信协议, 这大家都知道的, 什么TCP的三次握手等等, 面试经常被问到. 三次握手是为了保证连接的正确建立. 但是, 在通信的时候, 你如何保证你的消息正确送达了呢? 有人说了, 有收到请求的响应包. 但我说的不是这个,比如说,…

dataframe修改数据_数据处理进阶pandas入门(一)

前言NumPy作为数据处理的利器,在对数据进行科学计算、存储处理大型矩阵等方面为我们带来了极大的方便,但对于更进一步的数据分析任务,文件操作等方面显得有些吃力。于是,作为NumPy的进阶库pandas应运而生,在实际应用中…

java6个人抽奖抽三个人,基于Java的抽奖逻辑

小组在做一个抽奖系统,现在给我分配到了抽奖逻辑这方面的实现。EMMM,拿到分配的时候是懵B的。老大给的需求图给的关键表结构DROP TABLE IF EXISTS dd_annual_meeting_check;CREATE TABLE dd_annual_meeting_check (check_id int(255) NOT NULL AUTO_INCR…

python自动化教程_Python 任务自动化工具 tox 教程

1、tox 能做什么? 细分的用途包括: 创建开发环境 运行静态代码分析与测试工具 自动化构建包 针对 tox 构建的软件包运行测试 检查软件包是否能在不同的 Python 版本/解释器中顺利安装 统一持续集成(CI)和基于命令行的测试 创建和部…

php 添加inotify扩展,php inotify 扩展的安装

一、安装1) 从内核和目录里面查看是否支持inotify[rootnfs01 ~]# uname -r2.6.32-573.el6.x86_64[rootnfs01 ~]#** ls -l /proc/sys/fs/inotify/** -→主要查看下面有没有三个目录总用量 0-rw-r--r-- 1 root root 0 1月 21 13:03 max_queued_events-rw-r--r-- 1 root root…

简述python执行原理_Python程序的执行原理(1)(2)

Python程序的执行原理(1)(2) 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行。 2. 字节码 字节码在Python虚拟机程序…

python文本特征选择,机器学习--特征选择(Python实现)

特征选择就是从原始特征中选取一些最有效的特征来降低维度,,提高模型泛化能力减低过拟合的过程,主要目的是剔除掉无关特征和冗余特征,选出最优特征子集;常见的特征选择方法可以分为3类:过滤式(filter)、包裹式(wrapper…

用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)

python接口自动化一(设计一款自己的接口自动化框架) 一、起因: 前面学习过了python接口requests来进行接口测试,但是在框架选择上还是选择的unittest。当接口数量不怎么多时还好,但是当接口的量上去了,一切…

系统新模块增加需要哪些步骤_防锈高效型干式地暖模块解决了装修施工配合的哪些难点?...

通过前面的讲解,我们知道铝板干式地暖末端应用于地暖、辐射冷暖等系统的技术优势非常明显,即省层高、省费用、效果好、空调舒适、业主使用满意度高等,随着水泥黄沙的大幅涨价,其成本优势也突显出来,越来越多的暖通公司…

python爬取网站数据步骤_python怎么爬取数据

在学习python的过程中,学会获取网站的内容是我们必须要掌握的知识和技能,今天就分享一下爬虫的基本流程,只有了解了过程,我们再慢慢一步步的去掌握它所包含的知识Python网络爬虫大概需要以下几个步骤: 一、获取网站的地…

matlab chan算法定位,MATLAB实现基于Chan氏算法的三维TDOA定位

% 功能:基于chan算法的TDOA三维定位function [zp] Chan_3(Noise,MS)%基站数目BSN 7;%基站位置,每一列为一个基站位置BS [0, 2*sqrt(3), -2*sqrt(3), sqrt(3), -sqrt(3), -sqrt(3), sqrt(3);0, 0, 0, 3, 3, -3, -3;0, 0, 0, 0, 2, 2, 0];%无噪声情况下BS到MS的距离…