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

2023-12-25 10:01

本文主要是介绍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

这篇关于CVE-2023-49898 Apache incubator-streampark 远程命令执行漏洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535115

相关文章

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器