CVE-2022-33891 Apache Spark shell command injection

💡 原文中文,约6500字,阅读约需16分钟。
📝

内容提要

Apache Spark存在CVE-2022-33891命令注入漏洞,影响3.0.3及更早、3.1.1至3.1.2、3.2.0至3.2.1版本。启用ACL功能后,攻击者可通过UI的doAs参数注入任意用户名,经ShellBasedGroupsMappingProvider拼接执行Unix命令,实现任意命令执行。修复需升级版本、关闭ACL或自定义过滤。

🔎

延伸解读

漏洞触发条件与前提

该漏洞并非默认开启,需要管理员在启动Spark时显式配置spark.acls.enable=true,并配合认证过滤器使用。若未启用ACL功能,则攻击面不存在。此外,默认的组映射提供者为ShellBasedGroupsMappingProvider,即使不显式指定也会生效,因此只要开启ACL,默认配置即存在风险。

攻击路径与影响

攻击者通过构造包含恶意命令的doAs参数,利用Spark UI的HttpSecurityFilter进行用户模拟,最终在ShellBasedGroupsMappingProvider中拼接执行Unix命令。命令以Spark运行用户身份执行,可能导致敏感数据泄露、服务中断或进一步横向移动。攻击无需认证,只需网络可达Spark UI端口。

修复建议与注意事项

官方修复方案包括升级至已修复版本、关闭ACL功能,或自定义spark.user.groups.mapping并添加命令过滤。若业务必须使用ACL,建议优先升级,并在自定义映射中严格校验输入,避免直接拼接用户输入到系统命令。同时应限制Spark UI的暴露范围,降低被利用风险。

Q&A

CVE-2022-33891是什么漏洞?影响哪些Apache Spark版本?

CVE-2022-33891是Apache Spark中的命令注入漏洞,影响3.0.3及更早版本、3.1.1至3.1.2版本、3.2.0至3.2.1版本。

CVE-2022-33891漏洞的触发条件是什么?

需要启用ACL功能(通过配置spark.acls.enable=true),攻击者可通过UI的doAs参数注入任意用户名,进而执行任意命令。

CVE-2022-33891漏洞是如何被利用的?

攻击者向Spark UI发送带有恶意doAs参数的请求,该参数被拼接到Unix shell命令中,通过ShellBasedGroupsMappingProvider执行,导致任意命令执行。

CVE-2022-33891漏洞的修复方案有哪些?

修复方案包括:升级到最新版本;如果不需要ACL功能则关闭;如果需要ACL功能,可自定义spark.user.groups.mapping,在ShellBasedGroupsMappingProvider中添加命令执行过滤操作。

如何复现CVE-2022-33891漏洞?

启动Spark时启用ACL功能,例如:./spark-shell --conf spark.acls.enable=true --conf spark.ui.port=8090 --conf spark.ui.view.acls=true,然后访问http://<ip>:8090/?doAs=`open%20-na%20Calculator`即可触发。

CVE-2022-33891漏洞的利用路径是怎样的?

利用路径为:HttpSecurityFilter.doFilter -> SecurityManager.checkUIViewPermissions -> isUserInACL -> Utils.getCurrentUserGroups -> ShellBasedGroupsMappingProvider.getGroups -> 执行拼接的命令。

🏷️

标签

➡️

继续阅读