CVE-2023-49898 Apache incubator-streampark 远程命令执行漏洞

项目介绍

Apache Flink 和 Apache Spark 被广泛用作下一代大数据流计算引擎。基于大量优秀经验结合最佳实践,我们将任务部署和运行时参数提取到配置文件中。这样,带有开箱即用连接器的易于使用的 RuntimeContext 将带来更轻松、更高效的任务开发体验。它降低了学习成本和开发障碍,因此开发人员可以专注于业务逻辑。另一方面,如果在部署阶段没有专业的Flink & Spark任务管理平台,企业使用Flink & Spark也是一个挑战。StreamPark提供了这样一个专业的任务管理平台,包括任务开发、调度、交互式查询、部署、运行。

项目地址

  • https://github.com/apache/incubator-streampark.git
  • https://streampark.apache.org/

漏洞概述

在streampark中,项目模块集成了Maven的编译功能。但是没有检查Maven的编译参数。允许攻击者插入命令进行远程命令执行。

影响版本

2.0.0 before 2.1.2

漏洞分析

该项目最重要的功能就是对stream和flink的快速部署开发,允许用户新建 project 并使用maven编译运行。而且允许自定义Maven settings.xml的路径。

通过分析源码可知,该项目对于构建 "project" 是使用命令拼接方式。

上图中的方法主要作用是生成 mvn 命令,它可以处理 Maven 未安装、Maven Wrapper 存在但无法打开等情况。这个命令用于清理项目、打包项目,并跳过测试。

最重要的是如果有额外的构建参数或者指定了 Maven 的 settings 文件,它会添加并执行这些参数。方法会添加 --settings 参数和 settings 文件的路径。

那么我们需要重点关注的判断如下:

这个方法的主要作用是获取配置项的值。它首先从 confData 中获取,如果没有,就从系统属性中获取,如果还没有,就返回默认值。

下面这个 InternalOption 对象的主要作用是定义了一个配置项,用来表示 Maven 的 settings.xml 文件的完整路径。在获取配置项的值时,如果配置数据中没有这个配置项的值,将会使用默认值 null。

通过上面的函数分析,可以发现项目对用户传入的 setting.xml 的路径并未进行效验,且会直接拼接到 cmdBuffer 来当做命令执行。

随后当用户编译运行项目是,会直接调用 projectBuild 函数;projectBuild方法并不会进行校验,直接调用 CommandUtils.execute()


上面的代码定义了一个名为 CommandUtils 的对象,它提供了两个方法用于执行命令行命令:

execute(command: String): (Int, String)

execute(directory: String, commands: JavaIterable[String], consumer: Consumer[String]): Int

execute(command: String): (Int, String) 方法接受一个字符串类型的命令,执行这个命令,并返回一个元组

execute(directory: String, commands: JavaIterable[String], consumer: Consumer[String]): Int 方法接受一个目录、一个命令列表和一个Consumer。它在指定的目录下执行命令列表中的命令,并使用Consumer处理命令的输出(实际为fileLogger.info)

最后会调用 waitFor 函数来等待上面执行命令的进程结束,返回进程的退出码。在进程结束后,它关闭进程的错误流、输入流和输出流,并销毁进程。

两个execute分别用到了 Runtime.getRuntime.exec 和 ProcessBuilder.start,这两个是Java安全中常见的用于命令执行的敏感函数;虽然execute 方法。虽然它处理了命令的输出和错误,并且做到即使接触进程;但是通过持久化可以完成规避,实现远程命令执行。

通过上述分析,利用步骤很清晰了。攻击者需要在 mvn settings.xml 路径插入恶意代码;随后直接执行任意项目的编译命令或者等待开发者自己执行正常的项目编译命令即可。

漏洞分析

升级到最新版本,2.1.2 之后。

参考链接

  • https://streampark.incubator.apache.org
  • https://www.cve.org/CVERecord?id=CVE-2023-49898

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

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

相关文章

鸿蒙系列--组件介绍之其他基础组件(上)

上回介绍了基础组件中最常用的组件常用的基础组件,接下来还有其他基础组件 一、Blank 描述:空白填充组件 功能:在容器主轴方向上,具有自动填充容器空余部分的能力。只有当父组件为Row/Column时生效 子组件:无 Blan…

无约束优化问题求解(3):共轭梯度法

目录 4. 共轭梯度法4.1 共轭方向4.2 共轭梯度法4.3 共轭梯度法的程序实现4.4 非二次函数的共轭梯度法 Reference 4. 共轭梯度法 4.1 共轭方向 最速下降法的线搜索采取精确线搜索时,由精确线搜索需要满足的条件:迭代点列 x k 1 x k α k d k x_{k1}…

毅速:3D打印随形冷却水路助力模具行业降本、提质、增效

随着模具行业的不断发展,模具制造的精度和效率已经成为企业核心竞争力的重要组成部分。为了满足市场需求,模具行业一直在寻求新的制造技术和方法。3D打印技术的出现,为模具行业带来了革命性的变革。其中,3D打印随形冷却水路的应用…

基于比较的排序算法总结(java实现版)

目录 什么是基于比较的排序算法 什么是排序算法的稳定性 基础排序算法的稳定性 插入排序法 希尔排序法 冒泡排序法 总结 高级算法的稳定性 快速排序法 堆排序法 归并排序法 总结 注意 什么是基于比较的排序算法 基于比较的排序算法定义:之所以能给元素…

C# NPOI导出datatable----Excel模板画图表

1、创建Excel模板 2、安装NPOI管理包 3、创建工作簿 (XLSX和XLS步骤一样,以XLS为例) IWorkbook workbook null; string time DateTime.Now.ToString("yyyyMMddHHmmss"); string excelTempPath Application.StartupPath "…

论文解读:Informer-AAAI2021年最佳论文

论文背景 应用背景 训练的是历史数据,但预测的是未来的数据,但是历史数据和未来数据的分布不一定是一样的,所以时间序列应用于股票预测往往不太稳定 动作预测: 基于之前的视频中每一帧动作,预测下一帧这个人要做什么…

python之导入.py文件

目录 1、文件结构 2、导入.py文件 2.1同一层内文件夹内的导入 2.2不同层内文件夹内的导入 1、文件结构 Paint_master是一个工程的根目录,忽略一些文件及文件夹后,其文件结构如下: src util ImageUtil.py view BaseAdjustDialog.py MainW…

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

2023 年 1 月份后,比特币 Ordinals 协议出现后为铭文赛道的出现奠定了基础,它以聪为单位将比特币分成份,并在每一聪上攥刻不同的信息以达到非同质化资产的效果,而此后包括 BRC20 在内的诸多采用了 Ordinals 方案的应用不断面向市场…

告别高昂存储,高效灵活管理数据

前言 在当今数字化时代,企业面临着海量数据的挑战,这些数据承载着技术创新和业务发展的重要使命。因此,高效、安全地收集、存储和管理数据成为了企业关注的焦点。对于需要长期储存且低频聚合分析的数据,组织需要更加低成本和便捷…

【EI会议征稿】第三届算法、微芯片与网络应用国际会议(AMNA 2024)

第三届算法、微芯片与网络应用国际会议(AMNA 2024) 2024 3rd International Conference on Algorithms, Microchips and Network Applications 第三届算法、微芯片与网络应用国际会议(AMNA 2024) 将于2024年3月8-10日在中国西安召开, AMNA 2024将围绕 …

2023.12.19 关于 Redis 通用全局命令

目录 引言 Redis 全局命令 SET & GET KEYS EXISTS DEL EXPIRE TTL TYPE redis 引入定时器高效处理过期 key 基于优先级队列方式 基于时间轮方式 引言 Redis 是根据键值对的方式存储数据的必须要进入 redis-cli 客户端程序 才能输入 redis 命令 Redis 全局命令 R…

初识nginx——内存池篇

为了自身使用的方便,Nginx封装了很多有用的数据结构,比如ngx_str_t ,ngx_array_t, ngx_pool_t 等等,对于内存池,nginx设计的十分精炼,值得我们学习,本文介绍内存池基本知识,nginx内存池的结构和…