24 jun 2016

ImageMagick: Peligro de ejecución remota en Internet

Hace un mes y medio salió la primera de un conjunto de vulnerabilidades que afectan a ImageMagick. Dicho así, puede  no decirnos mucho, pero ImageMagick es una de las aplicaciones más utilizadas para la conversión y recorte de imágenes en los servidores de Internet. ImageMagick permite la manipulación y procesado de imágenes en cualquier sitio web. Por defecto, viene instalado en sistemas como Ubuntu, o incluso Kali Linux. 

Múltiples vulnerabilidades han afectado al software. Una de las vulnerabilidades descubiertas puede hacer que se pueda ejecutar código remoto. ¿Cómo? Al enviar una imagen al servidor, y éste vaya a procesarla o convertirla, un error en dicho proceso provoca que se ejecute el código embebido en el fichero. De este modo, se estima que miles de servidores expuestos en Internet son vulnerables a día de hoy. Además, según se indica en Internet el exploit para esta vulnerabilidad está siendo utilizado por algunos usuarios de manera pública, por lo que el riesgo es muy grande. El CVSS de dicha vulnerabilidad es de 10, ya que permite la ejecución de código remoto, sin necesidad de ninguna condición más. A continuación se enumeran las vulnerabilidades:

  • CVE-2016-3714. No se filtran caracteres correctamente y potencialmente se puede ejecutar código remoto.
  • CVE-2016-3715. Permite borrar archivos en el contexto del servidor.
  • CVE-2016-3716. Permite mover archivos.. 
  • CVE-2016-3717. Permite la lectura de ficheros locales. 
  • CVE-2016-3718. Este es un SSRF, con el que se pueden realizar peticiones HTTP o FTP.

El peligro real

¿Es realmente peligroso? ImageMagick dispone de diversos forks y una serie de plugins, por lo que a priori no se puede saber el número de servidores en Internet que pueden ser vulnerables a esto. Se estima que el número de servidores bastante alto, ya que el software es muy utilizado por los desarrolladores y administradores. La recomendación es clara: hay que actualizar en cuanto se pueda y no esperar más, ya que el nivel de exposición es muy alto. 

Para que la ejecución remota tenga éxito se necesita, en primer lugar, subir un archivo a un servidor. Este solicitará dicha imagen y al procesarla y disponer de una versión vulnerable de ImageMagick podría ocurrir algo no deseado por parte del propietario del servidor. Una ejecución de código remoto es la vulnerabilidad más crítica que se puede tener, ya que afecta a confidencialidad, integridad y disponibilidad. Es cierto, que la criticidad dependerá de los permisos del usuario con los que ImageMagick se ejecute. Sea como sea, en el mejor caso desde el punto de vista del hardening, solo se podría ejecutar acciones no privilegiadas, que no es poco. En el peor de los casos, se puede disponer de un usuario con el mayor privilegio. Además, siempre está la opción de la escalada de privilegios. 

PoC: Ejemplificando la vulnerabilidad

En esta prueba de concepto vamos a utilizar el software ImageMagick disponible, entre otros, en Kali Linux. En primer lugar, crearemos un archivo denominado poc.jpg y en su interior meteremos el código malicioso del tipo:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context

Si nos fijamos en la línea fill ‘url(https://example.com/image.jpg”|ls “-la)’ encontramos la inyección del comando y su potencial ejecución. 


Cuando ImageMagick procesa el fichero creado, en este caso p.jpg se provoca la ejecución de comandos, en este caso se ejecuta la instrucción ls –la. Al igual que se ejecuta un listado de directorios se podría ejecutar código arbitrario, o no tan arbitrario, como por ejemplo una shell o una Meterpreter. 

Con el módulo generate_payload_base64 se genera un texto en base64 que representa un binario encodeado. En este ejemplo utilizaremos una Meterpreter en base64. El módulo se queda a la espera con el handler preparado para recibir las conexiones. Es una de las formas similares a la explotación de un Command Injection.  


El fichero JPG tendrá el campo fill con este estilo. El esquema es el siguiente:
  • En primer lugar se vuelca en base64 a un fichero dentro del contexto del servidor, echo [shellcode base64] > /tmp/text
  • Después, se debe volcar a binario utilizando el base64 –d, cat /tmp/text | base64 –d > /tmp/binary2.
  • Ejecutar, revisar permisos y si no hay utilizar chmod. 

Al ejecutar el fichero en el servidor dónde está ImageMagick se produce la “magia”. Obtenemos una sesión de Meterpreter. 


El peligro está ahí fuera. Los administradores se enfrentan a una amenaza, la cual debe ser parcheada rápidamente. Ya hay exploits públicos que, como está prueba de concepto, se aprovecha de lo que está expuesto y es vulnerable. 

No hay comentarios:

Publicar un comentario