Apache StreamPark 是一个开源流数据处理平台,它提供了一组强大的工具和框架来处理实时数据流。 它建立在 Apache Flink 流处理引擎之上,提供了一组库和 API,使开发人员能够轻松构建、部署和管理流数据处理应用程序。
2024年12月,正式发布新版本(21.2) 修复 CVE-2023-49898 Apache Streampark ** 执行漏洞。经过身份验证的系统用户可以触发远程命令执行,攻击者可以利用此漏洞获取服务器权限。
在 Apache StreamPark 中,有一个项目管理模块集成了 m**en 的编译功能,但该函数不检查 m**en 的编译参数。
同时,Apache StreamPark允许用户自定义M**en配置,攻击者可以在M**en设置文件路径配置中插入恶意**进行远程命令执行。
成功利用该漏洞需要用户登录StreamPark系统并具有系统级权限。 因此,此漏洞的风险级别较低。
*Apache Streampark 的 docker-composeyaml 和。 env 文件:wget
wget 修改 docker-composeYAML 中 Apache StreamPark 的版本号为 release-21.1。使用 docker-compose up -d 启动容器,等待几分钟,然后进入 http:localhost:10000 查看 Streampark 的登录页面,表示环境已成功启动。
使用StreamPark的默认用户名admin和密码登录系统。
在设置中心 -> 系统设置 -> m**en 设置文件路径中配置恶意设置XML 路径:
usr/share/j**a/m**en-3/conf/settings.xml & touch /tmp/success
在这种情况下,浏览器会调用 Flink 设置更新 API 来修改 m**en 设置文件路径的配置信息。
在 streampark-> 项目管理中,有一个默认的 streampark-quickstart 项目,点击右侧更新项目。 将项目分支修改为任何现有分支并提交。 需要注意的是,容器必须能够访问仓库并获取仓库分支信息。
然后构建项目以触发漏洞以执行远程命令。
通过捕获包,我们看到浏览器调用了 Flink Project Build 接口来启动项目构建:
查看构建日志,可以看到恶意 **: 嵌入在 m**en 编译参数中
进入容器,可以看到 Touch TMP Success 已经成功执行:
首先将分支切换到 release-21.1。漏洞利用过程可分为以下两个步骤:
配置 m**en 设置将恶意 ** 插入 M**en 设置的 XML 路径XML 文件路径。
生成触发漏洞以执行远程命令的项目。
通过抓包分析,我们发现在修改 m**en 设置文件路径时,浏览器会调用 flink 设置更新接口,该接口会调用 settingservice 的 update() 方法
update() 方法将 m**en 设置文件路径的值写入数据库和全局配置。
当我们点击 Start Build Project 时,浏览器会调用 Flink Project Build 接口。 此 API 通过调用 ProjectService 来使用构建方法:
找到 ProjectServicebuild 方法,我们发现该方法以异步任务的形式执行 build 命令:
它触发 ProjectBuildTaskdorun() 方法启动构建任务:
projectbuildtask.dorun() 方法会先克隆项目,克隆成功后再调用 projectbuild(project) 进行编译构建
显然,服务器端是通过 commandutilsexecute 方法执行系统命令,参数为 projectgetm**enargs()。
getm**enargs() 方法在连接 cmdbuffer 时不会过滤或验证 internalconfigholder 取出的 m**en 设置路径。 因此,如果在m**en设置的配置中恶意系统命令嵌入在 xml 文件的路径中,包含恶意系统命令的 m**en 参数将直接传递给 Commandutilsexecute 方法。
12月28日,安全测量平台新增了针对该漏洞的攻击模拟,可以在安测平台搜索关键词“apache streampark”或“cve-2023-49898”获取相关的攻击模拟验证操作,以验证您的安全防御是否有效抵御漏洞,平台以行业独特的方式确保您的验证过程安全可靠。