Sin necesidad de cuenta ni de vista previa: vulnerabilidad en Rails permite atacar el servidor mediante un archivo adjunto

Sin necesidad de cuenta ni de vista previa: vulnerabilidad en Rails permite atacar el servidor mediante un archivo adjunto

En riesgo las claves que garantizan la seguridad de otros sistemas

image

Un archivo que parece una imagen puede hacer que el servidor web escriba datos en un lugar elegido por el atacante. Los desarrolladores de Ruby on Rails solucionaron una falla crítica en Active Storage, el componente para subir adjuntos. Un atacante no necesita una cuenta si la aplicación acepta archivos de usuarios externos y procesa imágenes mediante ImageMagick.

El equipo de Rails divulgó el problema el 4 de noviembre bajo el identificador GHSA-f3w6-w445-fwh9. La vulnerabilidad recibió una puntuación crítica de 9,8 en CVSS 3.0; aún no se ha asignado un número CVE al defecto. En cierta configuración, Active Storage permite escribir archivos en ubicaciones arbitrarias y, cuando el almacenamiento es local, también leer datos accesibles para la aplicación.

La causa está relacionada con los manejadores de formatos de ImageMagick. La biblioteca determina el manejador por el contenido del archivo, y algunos manejadores pueden operar con otros archivos en disco. Active Storage no restringía la selección. Un archivo SVG preparado especialmente podía activar el manejador de scripts MSL, que puede leer y escribir archivos siguiendo instrucciones incorporadas.

El mecanismo peligroso se dispara ya al adjuntar el archivo. El sitio no necesita generar una miniatura, una vista previa ni analizar la imagen por separado. Están en riesgo las aplicaciones que aceptan archivos de usuarios no confiables, utilizan MiniMagick y no prohíben formatos peligrosos en la política de ImageMagick. Las configuraciones por defecto de Debian y Ubuntu no proporcionan esa restricción.

Al almacenar adjuntos con Active Storage Disk, el atacante puede leer archivos accesibles para el proceso de la aplicación. Entre los objetivos posibles se incluyen secret_key_base, claves de cifrado, contraseñas de bases de datos y tokens de servicios externos. La filtración de secretos podría abrir la vía a la ejecución remota de código o al acceso a sistemas conectados, aunque la toma del servidor no está garantizada.

El fallo afecta a Active Storage anteriores a 8.0.5.2, así como a la rama 8.1 hasta 8.1.4.1. Con load_defaults configurado en 6.1 o inferior, por defecto se emplea MiniMagick, mientras que desde load_defaults 7.0 suele usarse libvips. En verano otra vulnerabilidad de Active Storage relacionada con libvips ya fue explotada en servidores reales. No hay confirmaciones de ataques mediante el nuevo defecto hasta ahora.

Las correcciones se incluyeron en Rails 8.0.5.2 y 8.1.4.1. Los desarrolladores añadieron una política de seguridad que prohíbe MSL, otros manejadores peligrosos y llamadas a Ghostscript. Para que la protección funcione se requiere mini_magick 5.1 o posterior. Las ramas más antiguas de Rails no tienen soporte, por lo que habrá que actualizar la aplicación o trasladar manualmente las reglas a la configuración del sistema de ImageMagick.

En las nuevas versiones de Rails se corrigieron en total 21 problemas de seguridad. Los desarrolladores también recomiendan cambiar secret_key_base, la clave maestra, contraseñas y tokens si la aplicación usó Disk y pudo estar vulnerable. Instalar la actualización no hace que los secretos divulgados previamente vuelvan a ser seguros. En la notificación no hay información sobre ataques reales mediante GHSA-f3w6-w445-fwh9.