CVE-2022-33891 Apache Spark shell 命令注入漏洞
VSole2022-07-20 06:23:36
漏洞信息
近日监测到 Apache Spark 官方通报了一个命令注入漏洞 CVE-2022-33891:
Apache Spark 支持启动 ACL 来为 Web UI 访问提供身份验证,当 ACL 启动时可以通过构造特殊请求用户名导致 RCE ,漏洞影响版本:
- versions 3.0.3 and earlier
- versions 3.1.1 to 3.1.2
- and versions 3.2.0 to 3.2.1
漏洞分析
下载`spark-3.2.1-bin-hadoop2.7.tgz` ,并配置启动 ACL 和远程调试:
分析前先查看一下补丁:
对 `ShellBasedGroupsMappingProvider#getUnixGroups` 函数代码进行了修改。
查询官方文档可知,Apache Spark 启动 ACL 后, Web UI 的 HTTP 请求需要通过 `HttpSecurityFilter` 全局过滤器的鉴权处理,定位 `HttpSecurityFilter#doFilter` :
提取 GET 参数 `doAs` 赋值给 `effectiveUser` 变量,然后进入 `checkUIViewPermissions` 函数:
跟进 `isUserInACL` :
这里正好进入了补丁修复的 `ShellBasedGroupsMappingProvider#getUnixGroups` 函数:
跟进 `executeAndGetOutput` 函数:
直接将用户名拼接进入命令执行参数中,导致出现了 RCE 漏洞。
漏洞复现
利用反斜杠直接进行命令注入,结果如下:
修复方式
前面已经提到,新版本更新了 `ShellBasedGroupsMappingProvider` ,去掉了 `bash` 的直接调用,先后执行两次 `Process#start` ,最后执行语句变为:

VSole
网络安全专家