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
網絡安全專家