CVE-2022-33891 Apache Spark shell 命令注入漏洞分析

漏洞简介       

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

        Apache Spark UI 提供了通过配置选项启用 ACL 的可能性。使用身份验证筛选器,这将检查用户是否具有查看或修改应用程序的访问权限。如果启用了 ACL,则 HttpSecurityFilter 中的代码路径可以允许某人通过提供任意用户名来执行模拟。然后,恶意用户可能能够访问权限检查函数,该函数最终将根据其输入构建 Unix shell 命令并执行它。这将导致执行任意 shell 命令,因为用户 Spark 当前运行时为该命令。这会影响 Apache Spark 版本 3.0.3 及更早版本、版本 3.1.1 至 3.1.2 以及版本 3.2.0 至 3.2.1。spark.acls.enable

漏洞影响版本

This affects Apache Spark versions 3.0.3 and earlier, versions 3.1.1 to 3.1.2, and versions 3.2.0 to 3.2.1.

修复方式

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

漏洞分析

在 ShellBasedGroupsMappingProvider 类中

getUnixGroups 使用了传进来的参数username与命令进行拼接直接执行了命令。

向上分析调用链

find usages ShellBasedGroupsMappingProvider#getUnixGroups

find usages ShellBasedGroupsMappingProvider#getGroups

继续向上分析

find usages #getCurrentUserGroups

继续向上分析

find usages #isUserInACL

继续向上分析

find usages #checkUIViewPermissions

来到了dofilter, 分析得知effectiveUser这个参数是 Option(hreq.getParameter("doAs"))得来是可控的变量

如此便有命令执行的可能

漏洞复现

下载源码Release v3.1.1 · apache/spark · GitHubApache Spark - A unified analytics engine for large-scale data processing - Release v3.1.1 · apache/sparkicon-default.png?t=N7T8https://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 [yourip]:4040

打入dnslog命令

查看回显

成功回显,漏洞利用成功

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称还在想呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值