CVE-2022-33891 Apache Spark shell 命令注入漏洞分析

漏洞简介       

 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架 Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

        Apache Spark UI 提供了通过配置选项启用 ACL 的可能性。使用身份验证筛选器,这将检查用户是否具有查看或修改应用程序的访问权限。如果启用了 ACL,则 HttpSecurityFilter 中的代码路径可以允许某人通过提供任意用户名来执行模拟。然后,恶意用户可能能够访问权限检查函数,该函数最终将根据其输入构建 Unix shell 命令并执行它。这将导致执行任意 shell 命令,因为用户 Spark 当前运行时为该命令。这会影响 Apache Spark 版本 3.0.3 及更早版本、版本 3.1.1 至 3.1.2 以及版本 3.2.0 至 3.2.1。spark.acls.enable

漏洞影响版本

This affects Apache Spark versions 3.0.3 and earlier, versions 3.1.1 to 3.1.2, and versions 3.2.0 to 3.2.1.

修复方式

升级到 Apache Spark 3.1.3、3.2.2 或 3.3.0 或更高版本

漏洞分析

在 ShellBasedGroupsMappingProvider 类中

getUnixGroups 使用了传进来的参数username与命令进行拼接直接执行了命令。

向上分析调用链

find usages ShellBasedGroupsMappingProvider#getUnixGroups

find usages ShellBasedGroupsMappingProvider#getGroups

继续向上分析

find usages #getCurrentUserGroups

继续向上分析

find usages #isUserInACL

继续向上分析

find usages #checkUIViewPermissions

来到了dofilter, 分析得知effectiveUser这个参数是 Option(hreq.getParameter("doAs"))得来是可控的变量

如此便有命令执行的可能

漏洞复现

下载源码Release v3.1.1 · apache/spark · GitHubApache Spark - A unified analytics engine for large-scale data processing - Release v3.1.1 · apache/sparkicon-default.png?t=N7T8https://github.com/apache/spark/releases/tag/v3.1.1

构建项目

./build/mvn -DskipTests clean package

启动 Apache spark 项目

./bin/spark-shell --conf spark.acls.enable=true

访问url [yourip]:4040

打入dnslog命令

查看回显

成功回显,漏洞利用成功

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

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

相关文章

鸿蒙OS开发实例:【demo选择列表限定数量】

效果图: 示例代码 // 使用 DevEco Studio 3.1.1 Release 及以上版本,API 版本为 api 9 及以上。 // 主要功能及注意事项: // 该组件展示了一个乘客选择列表。列表中的每个项目包含一个复选框和对应的乘客姓名, // 用户点击任意一…

MATLAB 自定义生成圆柱点云(49)

MATLAB 自定义生成圆柱点云(49) 一、算法介绍二、具体实现1.代码2.效果一、算法介绍 按照一些提前指定的圆柱参数,自定义生成圆柱点云,可添加噪声,用于后续的实验测试 二、具体实现 1.代码 代码如下(示例): % 指定圆柱的参数 radius = 5; % 圆柱半径 height = 20…

【Spring源码】Bean采用什么数据结构进行存储

一、前瞻 经过上篇源码阅读博客的实践,发现按模块阅读也能获得不少收获,而且能更加系统地阅读源码。 今天的阅读方式还是按模块阅读的方式,以下是Spring各个模块的组成。 那今天就挑Beans这个模块来阅读,先思考下本次阅读的阅读…

Jmeter脚本优化——随机函数

线程组下有 2 个请求的参数中均使用到相同的参数,在进行参数化时,想 要每个请求使用不同的取值。 ( 1 ) 线程组设置如下 ( 2 ) 线程组下添加加购物车请求,请求传参包含商品 id (…

前端日期组件layui使用,月模式

初学前端,实战总结 概要 有一个日期组件,我的谷歌浏览器选完日期后,偶尔获取不到最新数据,有一个客户,是经常出不来数据。 日期组件是Wdate:调用的方法是WdatePicker onpicking,代码片段如下…

基于AT89C51单片机的智能交通灯设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89035863?spm1001.2014.3001.5503 1绪 论 1.1课题研究背景 交通是城市经济活动的命脉,对城市经济发展、人民生活水平的提高起着十分重要的作用。城市交…

干货分享DS5L1伺服电机通过倍讯科技485转 Profinet 网关与西门子PLC进行通信的配置方法

倍讯科技485转 ProfinetDS5L1 伺服电机与 Profinet 网关进行通信需要了解 Profinet 协议和伺服电机的具体通信要求。以下是您可以如何解决此问题的总体概述: 了解 Profinet:Profinet 是自动化工业以太网标准。您需要了解 Profinet 的工作原理、其寻址方案…

纳斯达克大屏:媒体尺寸及投放费用详解

纳斯达克大屏媒体尺寸及投放费用详解 纳斯达克图片要求 像素 纳斯达克大屏媒体图片的像素要求为2336 H x 1832 W (pixels)。确保你的图片符合这一尺寸要求,以确保在大屏上的显示效果最佳。 分辨率 分辨率要求为(1.0) px 72 dpi。这意味着每个像素显示为一个实…

Spire.PDF for .NET【文档操作】演示:查找并删除 PDF 中的空白页

PDF 中的空白页并不罕见,因为它们可能是作者故意留下的或在操作文档时意外添加的。当您阅读或打印文档时,这些空白页可能会很烦人,因此可能非常有必要将其删除。在本文中,您将了解如何使用Spire.PDF for .NET以编程方式查找和删除…

亲测有效Djiango连接oracle

navicat连接本地oracle截图。 Djiango下面settings.py下面的DATABASES: 注意:USER最好不要用sys或者system可能会导致连接不了,最好是自己新建的oracle用户。

【C++11】thread线程库

【C11】thread线程库 目录 【C11】thread线程库thread类的简单介绍函数指针lambda表达式常用在线程中 线程函数参数join与detach利用RAII思想来自动回收线程 原子性操作库(atomic)atomic中的load函数:atomic中对变量进行原子操作的一些函数 CAS(Compare-And-Swap)无…

VGG16神经网络搭建

一、定义提取特征网络结构 将要实现的神经网络参数存放在列表中,方便使用。 数字代表卷积核的个数,字符代表池化层的结构 cfgs {"vgg11": [64, M, 128, M, 256, 256, M, 512, 512, M, 512, 512, M],VGG13: [64, 64, M, 128, 128, M, 256, …

「11」显示器采集:捕获单个显示器的完整视频画面

「11」显示器采集捕获单个显示器的完整视频画面 在OBS软件中,「显示器采集」是一种用于捕集显示器屏幕画面的功能,您可以将其用于整个桌面窗口的采集到直播间。该功能主要用于捕捉您的计算机桌面屏幕内容,以便将其实时显示在直播窗口中&#…

MySQL Explain 字段详解

Explain 工具介绍 Explain 一般被称为解释器,通过 Explain 工具,我们能分析我们使用的查询语句或是结构的性能瓶颈,它提供 MySQL 如何执行语句的信息。 使用语法: explain [extended|partition] select在 select 关键字前加 ex…

第 1 章.提示词:开启AI智慧之门的钥匙

什么是提示词? 提示词,是引导语言模型的指令,让用户能够驾驭模型的输出,确保生成的文本符合需求。 ChatGPT,这位文字界的艺术大师,以transformer架构为基石,能轻松驾驭海量数据,编织…

R 生存分析3:Cox等比例风险回归及等比例风险检验

虽然Kaplan-Meier分析方法目前应用很广,但是该方法存在一下局限: 对于一些连续型变量,必须分类下可以进行生存率对比 是一种单变量分析,无法同时对多组变量进行分析 是一种非参数分析方法,必须有患者个体数据才能进行分析 英国…

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器是一种高级别的模拟设备,用于模拟太阳光的光谱、强度及照射角度,应用于太阳能电池板、光伏系统等领域的研究和测试。其参数包括光谱范围、光强度、光源、照射角度、均匀性和稳定性,可根据需求调整…

ubuntu20.04安装截图工具flameshot

ubuntu20.04 自带的截图工具,可以使用快捷键“shift printScreen” ,但是它不能对截图进行编辑。 现在安装截图工具 flameshot,使用以下命令: sudo apt install flameshot 安装完成后,使用以下命令打开: flamesho…

Go 语言基础语法

目录 行分隔符 注释 标识符 字符串连接 关键字 Go 语言的空格 格式化字符串 Printf 实例 Go 语言变量 变量声明 多变量声明 值类型和引用类型 简短形式,使用 : 赋值操作符 Go 程序可以由多个标记组成,可以是关键字,标识符&#…

C++ 之LeetCode刷题记录(四十)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 目标:执行用时击败90%以上使用 C 的用户。 27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值…