★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
近日监测到 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` ,最后执行语句变为:
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全及文章作者不为此承担任何责任。
★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
原文始发于微信公众号(且听安全):CVE-2022-33891 Apache Spark shell 命令注入漏洞