0x01漏洞简述 2022年07月19日,Apache官方
发布了Apache Spark
的风险通告,漏洞编号为CVE-2022-33891
,漏洞等级:中危
,漏洞评分:6.5
。
Apache Spark 是用于大规模数据处理的统一分析引擎。它提供了 Scala、Java、Python 和 R 中的高级 API,以及支持用于数据分析的通用计算图的优化引擎。它还支持一组丰富的高级工具,包括用于 SQL 和 DataFrames 的 Spark SQL、用于 Pandas 工作负载的 Spark 上的 Pandas API、用于机器学习的 MLlib、用于图形处理的 GraphX 和用于流处理的结构化流。
0x02风险等级
文章图片
0x03漏洞详情
CVE: CVE-2022-33891
组件: Spark
【apache|CVE-2022-33891(Apache Spark 命令注入漏洞通告)】漏洞类型: 命令注入
影响: 服务器接管
简述: Apache Spark UI 提供了通过配置选项 spark.acls.enable 启用 ACL 的可能性。如果启用了 ACL,则 HttpSecurityFilter 中的代码路径可以允许攻击者通过提供任意用户名来执行模拟。因此,攻击者能够访问权限检查功能,该功能最终将根据攻击者的输入构建一个 Unix shell 命令并执行。成功利用此漏洞可导致任意 shell 命令执行。
0x04影响版本
文章图片
0x05漏洞复现
环境搭建:
在官网(https://archive.apache.org/dist/spark)下载Apache Spark 3.2.1版本进行漏洞复现分析。
文章图片
漏洞触发的关键在于是否启用ACL,使用身份验证过滤器。
启用ACL的两种方式:
1、通过设置选项 spark.acls.enable 启用 。
2、运行spark-shell时,通过-c参数启动。
为更好分析漏洞,在运行spark-shell前,需在其中进行远程调试配置
export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
文章图片
配置完成后运行spark-shell,并开启ACL
./spark-shell --conf spark.acls.enable=true
文章图片
漏洞原理
根据diff(https://github.com/apache/spark/pull/36315/files)分析。
文章图片
如上所示,使用命令拼接且没有做任何处理,而在修复的版本中直接删除了ShellBasedGroupsMappingProvider函数中对bash的调用。
动态分析
了解漏洞原理之后,就该考虑如何触发漏洞。
在Apachespark启用ACL后,会通过HttpSecurityFilter这个filter进行权限的校验。
首先将断点打在org.apache.spark.ui.HttpSecurityFilter#doFilter函数处。
文章图片
在进入doFilter函数之后,首先会提取参数“doAs”的值,然后赋值给effectiveUser,进入org.apache.spark.SecurityManager#checkUIViewPermissions函数。
文章图片
后续跟进一系列函数进行处理。
文章图片
进入org.apache.spark.security.ShellBasedGroupsMappingProvider#getGroups函数时,username为传入参数。
文章图片
随后进入org.apache.spark.security.ShellBasedGroupsMappingProvider#getUnixGroups函数。
文章图片
在这里username进行了拼接处理,因为我们传入的username参数可控,便形成了命令注入。
后续将通过executeAndGetOutput函数直接触发传入的命令,造成命令执行。
文章图片
漏洞复现
通过反单引号和参数“doAs”成功命令注入
文章图片
修复建议 建议受影响的用户升级到安全版本:Apache Spark 3.1.3、3.2.2 或 3.3.0 或更高版本
推荐阅读
- apache|Apache Log4j2远程代码执行漏洞(CVE-2021-44228)漏洞复现
- 漏洞复现|CVE-2022-33891 Apache Spark 命令注入复现
- 安全|漏洞通告 | Apache Spark UI命令漏洞;Grails远程代码漏洞;Confluence Questions漏洞
- Python学习笔记|【Python数据分析】数据探索+ 数据预处理
- Python数据分析与挖掘实战|【数据分析系列】Python数据预处理总结篇
- 分布式|K8s入门到企业实战
- 大数据|滴滴开源了哪些有意思的项目()
- 数据库|滴滴技术牛逼吗(看它开源了哪些有意思的项目)
- 数据库|SpringBoot 项目模板(摆脱步步搭建)