Mitigación de vulnerabilidades de ImageMagick en Node.js
6 de mayo de 2016
0 minutos de lecturaA principios de esta semana se divulgaron varias vulnerabilidades graves y fáciles de explotar en ImageMagick, y se sabe que ya se están explotando. Como aún no hay una corrección oficial, creamos un paquete llamado imagemagick-safe que desactiva las funciones vulnerables y protege contra los exploits conocidos.
En resumen
ImageMagick es una biblioteca y un binario muy populares para manipular imágenes. Entre otros usos, suele utilizarse para procesar contenido generado por los usuarios, como imágenes de avatar y fotos de productos, o para mostrar imágenes en canales sociales.
A principios de esta semana, se divulgaron varias vulnerabilidades graves y fáciles de explotar en ImageMagick que se dieron a conocer. Aún no hay una corrección oficial, pero es posible mitigar el problema desactivando ciertas funciones.
En Node.js, ImageMagick se invoca principalmente a través del paquete npm imagemagick. Este paquete no se actualiza desde hace más de dos años, por lo que es poco probable que ayude a resolver este problema.
Para ayudar a proteger a quienes usan ImageMagick en Node.js, lanzamos un paquete npm específico llamado imagemagick-safe, que desactiva las funciones vulnerables. También enviamos un pull request con este cambio al repositorio de GitHub del paquete imagemagick, pero, dada la inactividad del repositorio, creemos que es poco probable que lo incorporen.
ImageTragick: contexto
Las vulnerabilidades divulgadas son especialmente importantes por tres razones:
Algunas de las vulnerabilidades son extremadamente graves: permiten a los atacantes ejecutar comandos en el servidor, exponer archivos del servidor y mucho más.
Las vulnerabilidades son muy fáciles de explotar: basta con un archivo de imagen creado específicamente para este fin y una sola solicitud HTTP.
Todavía no hay una corrección oficial disponible.
Se sabe que las vulnerabilidades ya se están explotando.
Todo el incidente se conoce como ImageTragick. Puedes encontrar más detalles sobre las vulnerabilidades en su sitio web específico, imagetragick.com.
Causa y mitigación
Según lo que se sabe hasta ahora, todas las vulnerabilidades están relacionadas con el procesamiento de determinados tipos de archivos de imagen y palabras clave, como MVG, URL y HTTPS. Los tipos de archivo admiten una acción interna (por ejemplo, incluir otra imagen), y el procesamiento de estas acciones no se sanitiza lo suficiente, lo que permite la ejecución remota de comandos. Este es un ejemplo de exploit, copiado del sitio web oficial sobre las vulnerabilidades:
Ejemplo de exploit.svg
Ejemplo de ejecución
Para desactivar la compatibilidad con estos formatos y palabras clave, edita el archivo de configuración opcional policy.xml de ImageMagick y asegúrate de que incluya el contenido que aparece a continuación. Esto eliminará algunas funciones, pero también resolverá las vulnerabilidades. Ten en cuenta que editar la política no garantiza que se bloqueen todos los exploits posibles, pero los investigadores de las vulnerabilidades afirman que bloquea todos los que conocen actualmente.
Paquete npm imagemagick-safe
Como el paquete principal imagemagick no está activo, creamos un nuevo paquete llamado imagemagick-safe.
Este paquete obliga a usar la política mencionada, lo que desactiva algunas funciones y elimina las vulnerabilidades. Te recomendamos usarlo hasta que se publiquen nuevos binarios de ImageMagick y confirmes que tus sistemas se actualizaron.
Ten en cuenta que también puedes usar ImageMagick mediante el paquete gm; estamos evaluando enviar un pull request allí también.
Si encuentras algún problema o tienes comentarios sobre este paquete, avísanos en support@snyk.io.
Empieza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.