开源漏洞深度分析|CVE-2022-33891 Apache Spark 命令注入漏洞

开源漏洞深度分析

棱镜七彩研究院威胁情报团队对CVE-2022-33891 Apache Spark 命令注入漏洞进行了深度分析。

项目介绍

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

项目地址

https://spark.apache.org/

漏洞概述

Apache Spark UI 可以设置选项 spark.acls.enable 启用 ACL ,使用身份验证过滤器。用以检查用户是否具有查看或修改应用程序的访问权限。如果启用了 ACL则 HttpSecurityFilter 中的代码路径可以允许用户通过提供任意用户名来执行命令。该功能最终将根据用户输入构建一个 Unix shell 命令并执行它,最终导致任意命令执行。

影响版本

影响 Apache Spark 3.0.3 和更早版本、版本 3.1.1 - 3.1.2 以 3.2.0 - 3.2.1

环境搭建

按漏洞影响版本下载spark源码3.1.1,链接如下:https://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,尾部拼接 ?doAs=`command` 即可

漏洞分析

1.根据参考链接需要开启ACL,查询官方文档得到开启ACL选项为spark.acls.enable

spark.acls.ena falseble

Whether UI ACLs should be enabled. If enabled, this checks to see if the user has access permissions to view or modify the application. Note this requires the user to be authenticated, so if no authentication filter is installed, this option does not do anything.

val ACLS_ENABLE = ConfigBuilder("spark.acls.enable")    .version("1.1.0")    .booleanConf    .createWithDefault(false)

故环境启动命令需添加配置选项为 --conf spark.acls.enable=true

2.依据参考链接可知issue编号为SPRAK-38992,代码对比如下所示

分析代码可知,该函数并未对参数username做过滤

sink点为ShellBasedGroupsMappingProvider#getUnixGroups,source点根据参考链接确为HttpSecurityFilter,可溯整条调用链。

ShellBasedGroupsMappingProvider#getUnixGroupsShellBasedGroupsMappingProvider#getGroups

val userGroups = getUnixGroups(username)

Utils#getCurrentUserGroups

val currentUserGroups = groupMappingServiceProvider.getGroups(username)

SecurityManager#isUserInACL

val userGroups = Utils.getCurrentUserGroups(sparkConf, user)

SecurityManager#checkUIViewPermissions

isUserInACL(user, viewAcls, viewAclsGroups)

HttpSecurityFilter#doFilter

if (!securityMgr.checkUIViewPermissions(effectiveUser)) {      hres.sendError(HttpServletResponse.SC_FORBIDDEN,        s"User $effectiveUser is not authorized to access this page.")

阅读 HttpSecurityFilter 源码可知参数为doAs

val effectiveUser = Option(hreq.getParameter("doAs"))

构造参数传入命令执行即可

修复方式

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

参考链接

https://lists.apache.org/thread/p847l3kopoo5bjtmxrcwk21xp6tjxqlc

https://spark.apache.org/docs/3.1.1/security.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: OpenSSL命令注入漏洞CVE-2022-1292)是指在OpenSSL 1.0.2版本中存在的漏洞。为了修复这个漏洞,你需要将OpenSSL 1.0.2升级到SSL 3版本。首先,你可以使用以下命令查看OpenSSL的版本信息:\[1\] ``` openssl version ``` 然后,你可以从OpenSSL官方网站下载SSL 3的升级包。下载地址可以在官方网站上找到。\[2\]你可以使用以下命令下载升级包: ``` wget https://www.openssl.org/source/openssl-3.0.5.tar.gz ``` 下载完成后,解压升级包并进入解压后的目录: ``` tar -zxvf openssl-3.0.5.tar.gz cd openssl-3.0.5/ ``` 接下来,你可以使用以下命令进行编译和安装: ``` ./config shared zlib make make install ``` 在安装之前,建议备份原始文件。安装完成后,你可以添加新的OpenSSL软连接,并将编译后的库文件写入so库配置文件。具体操作可以参考相关文档或官方指南。\[2\] 请注意,升级OpenSSL可能会对系统产生影响,请确保在操作之前备份重要数据,并在升级过程中谨慎操作。 #### 引用[.reference_title] - *1* *2* *3* [openssl 漏洞升级 (CVE-2015-4000/CVE-2022-1292)](https://blog.csdn.net/qq_44637753/article/details/126829820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值