Blog
dark mode light mode Search Archivos descargables
Search

CVE-2019-9194: Desencadenamiento y explotación de vulnerabilidad 1-day

Vulnerabilidad 1-day

Muchas veces es difícil buscar exploits vinculados a ciertos CVE (Vulnerabilidades y exposiciones comunes). Son casi imposibles de encontrar y, normalmente, no tienen un PoC (Prueba de concepto) sobre la vulnerabilidad.

Existe una vulnerabilidad de inyección de comandos en elFinder, que afecta a la mayoría de las versiones hasta la 2.1.47. La vulnerabilidad se identifica como CVE-2019-9194. Fue reportada por Thomas Chauchefoin y afecta al componente PHP Connector.

En este artículo, nos encargaremos de entenderla. Te mostraremos cómo realizar el proceso para encontrar esta vulnerabilidad 1-day y explotarla, para la creación de un exploit funcional.

¿Quién utiliza elFinder?

El proyecto tiene nada menos que 3.180 estrellas en Github en el momento que se escribió este post, eso puede hacerlo bastante popular.

Y como puedes ver, a través de un simple Google Dork puedes listar un gran número de sitios que tienen una instalación de elFinder, la mayoría de las versiones encontradas son vulnerables.

quien-utiliza-elFinder-Vulnerabilidad-1-day

Ver los commits

Al entrar en el Github de elFinder, en el readme, se puede ver en mayúsculas un mensaje que advertía al usuario del peligro de utilizar versiones anteriores o iguales a la 2.1.47. Como se puede ver en las publicaciones, la vulnerabilidad fue parcheada rápidamente en su nueva versión 2.1.48 (Buen trabajo de los desarrolladores).

ver-los-commits-vulnerabilidad-1-day

Luego, se fue directamente a los commits del repositorio para ver cuáles habían sido los cambios, y así tener una idea de dónde estaba la vulnerabilidad.

En el commit, se ve claramente que se hicieron varias modificaciones al código dentro del script PHP elFinderVolumeDriver.class.php, pero sólo uno de los cambios llamó fuertemente la atención.

En la imagen anterior, se puede ver que dentro de la función imgRotate() la variable $path fue modificada por $quotedPath, que se puede ver un poco más arriba de lo que es correctamente saneado mediante el uso de la función escapeshellarg(). Así que nos dirigimos directamente al script FinderVolumeDriver.class.php, para mirar más de cerca el código.

Vulnerabilidad desencadenante

La función imgRotate() se encarga de rotar una imagen JPEG dada por el usuario, para ello utiliza 2 binarios que están instalados en el sistema.

  • exiftran
  • jpegtran

Ambos son clientes de consola cuya función es transformar imágenes JPEG. Puedes ver dentro de la función imgRotate() la existencia de dos IF.

El primer IF verifica si el binario exiftran está instalado en el sistema, en caso contrario, llamará al binario jpegtran (si está instalado). La vulnerabilidad requiere la existencia del primer binario (exiftran) ya que la variable $path no está correctamente saneada y es necesario entrar en dicha condicional para explotar correctamente la Inyección de Comandos.

Explotar la vulnerabilidad 1-day

Una vez que se supo en dónde y cómo se producía la vulnerabilidad, llega el momento de explotarla. Para ello, se subió una imagen JPEG con el siguiente nombre.

1
test.jpeg;touch $(echo -n 2e2e2f66696c65732f70776e6564|xxd -p -r);echo rce.jpeg

El payload anterior es responsable de crear un archivo llamado pwned, en el directorio files. Se realizó una codificación de la cadena “../files/pwned” en hexadecimal, ya que había problemas con la / (barra) en el nombre del archivo, donde todo lo que seguía a un carácter de barra era cortado.

Una vez cargada la imagen, se empezó a girarla para que se produjera la inyección de comandos.

En el momento de realizar la rotación, el comando malicioso se inyectó en la variable $path de la siguiente manera.

1
exiftran -i -9 test.jpeg;touch $(echo -n 2e2e2f66696c65732f70776e6564|xxd -p -r);echo rce.jpeg

Al recargar la página se puede ver que el archivo pwned se creó correctamente.

Para automatizar la explotación de la vulnerabilidad 1-day, crea un exploit escrito en python que se encargue de crear una sencilla WebShell en PHP para ejecutar comandos en el host remoto de una forma más cómoda.

CVE-2019-9194: https://www.exploit-db.com/exploits/46481

A continuación puedes ver en un breve vídeo cómo funciona el exploit. Se debe pasar como primer argumento la URL completa donde está instalado elFinder.

https://asciinema.org/a/ATqmqv0IUA9HrgDqffKUULYsQ

Hackmetrix newsletter ciberseguridad