Apache Spark 命令注入(CVE-2022-33891)

Posted 番茄酱料

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Spark 命令注入(CVE-2022-33891)相关的知识,希望对你有一定的参考价值。

利用范围

Spark Core - Apache <=3.0.3
3.1.1 <= Spark Core - Apache <=3.1.2
3.2.0 <= Spark Core - Apache <=3.2.1

环境搭建
修改bin目录下的spark-shell
修改如下,添加调试端口

变动如上

然后启动

./spark-shell --conf spark.acls.enable=true


即可访问到如上页面

漏洞复现

然后输入poc
在url后拼接

?doAs=command

如下命令:

?doAs=`touch /tmp/1.txt`


成功RCE

补丁对比


如上所示,使用命令拼接且没有做任何处理,而在修复的版本中直接删除了ShellBasedGroupsMappingProvider函数中对bash的调用。

远程调试


Apche spark启用了ACL之后,会通过HttpSecurityFilter这个filter进行权限校验
那么我们将断点打在org.apache.spark.ui.HttpSecurityFilter#doFilter函数处
然后我们访问

如下

可以看到代码逻辑,在进入doFilter函数之后,首先会提取参数“doAs”的值,然后赋值给effectiveUser,进入org.apache.spark.SecurityManager#checkUIViewPermissions函数。

继续跟进isUserInACL

user被getCurrentUserGroups调用,进入getCurrentUserGroups中

username被getGroups调用,那么进入getGroups中

username被getUnixGroups调用,那么进入getUnixGroups中


在这里username进行了拼接处理,因为我们传入的username参数可控,便形成了命令注入。后续将通过executeAndGetOutput函数直接触发传入的命令,造成命令执行。如下:

完结

以上是关于Apache Spark 命令注入(CVE-2022-33891)的主要内容,如果未能解决你的问题,请参考以下文章

漏洞复现:Apache Spark 命令注入(CVE-2022-33891)

Apache Spark JDBC SQL 注入 (pyspark)

Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)

是否可以使用带有魔术命令的 Azure Synapse 在 Apache Spark 中运行 Bash 命令

未能启动 apache.spark.master

Apache Spark 配置