Una imagen manipulada permite escribir archivos en servidores con Ruby on Rails
Ruby on Rails, el framework web con el que funcionan muchas tiendas online, productos SaaS y startups, ha corregido un fallo crítico: un atacante sin cuenta podía escribir archivos arbitrarios en el servidor con solo subir una imagen manipulada. El error está en Active Storage, el componente de Rails que gestiona la subida de archivos, y afecta a las aplicaciones que procesan imágenes con ImageMagick. Tiene una puntuación de 9,8 sobre 10, según el aviso de seguridad de Rails. La corrección salió el 4 de noviembre en Rails 8.0.5.2 y 8.1.4.1.
Cómo una sola subida rompe el servidor
ImageMagick decide cómo leer un archivo por su contenido, no por su nombre. Algunos de sus «codificadores» no se limitan a decodificar una imagen: siguen instrucciones del propio archivo y leen o escriben otros archivos del disco. Active Storage no restringía ninguno y ejecuta su analizador de ImageMagick en cuanto se adjunta un archivo. «Basta con adjuntar el archivo subido; no hace falta ninguna llamada a variant, preview ni analyze», dice el aviso.
Si la aplicación guarda los archivos en el disco local (el servicio Disk), el atacante también puede leer cualquier archivo al que tenga acceso la aplicación. Entre ellos suelen estar secret_key_base y las credenciales de bases de datos, almacenamiento en la nube y servicios de terceros. Con ellas, advierte el aviso, un atacante puede llegar a ejecutar código en remoto o saltar a los sistemas conectados. El fallo lo comunicó el investigador ryotak a través de HackerOne. Rails dice que le notificaron una cadena de ataque, «pero no damos por hecho que sea la única».
Qué aplicaciones están afectadas
Una aplicación es vulnerable si se cumplen las tres condiciones:
- Las imágenes las procesa ImageMagick. Es el procesador de variantes
:mini_magick, el predeterminado en aplicaciones conload_defaults 6.1o anterior. Desde Rails 7.0, las aplicaciones nuevas usan libvips, así que solo están expuestas si alguien las volvió a cambiar a ImageMagick. - ImageMagick funciona sin una política estricta. Las políticas que traen los paquetes de Debian y Ubuntu no bloquean los codificadores implicados.
- Desconocidos pueden subir archivos: avatares, fotos de productos, adjuntos en tickets de soporte.
Están afectadas las versiones de activestorage anteriores a 8.0.5.2 y la rama 8.1 anterior a 8.1.4.1. Las ramas antiguas no recibirán parche: el equipo de Rails afirma que las versiones anteriores ya no tienen soporte y recomienda pasar al menos a la serie 8.0, cuyo soporte de seguridad termina, eso sí, el 7 de noviembre de 2026. La misma versión corrige otros 20 problemas de seguridad, cuatro de ellos de gravedad alta, entre ellos un fallo distinto en las vistas previas de vídeo que podía llevar a ejecutar código mediante FFmpeg.
El aviso no menciona ataques reales. Pero, una vez publicada la corrección, los atacantes pueden comparar el código antiguo con el nuevo para localizar el fallo, así que cada día sin actualizar aumenta el riesgo.
Qué deben hacer los desarrolladores
- Actualiza a Rails 8.0.5.2 o 8.1.4.1. Si usas mini_magick, también necesitas mini_magick 5.1 o posterior; si no, la aplicación fallará al arrancar.
- Si no puedes actualizar de inmediato, copia la política de ImageMagick de la versión corregida al
policy.xmldel sistema. Como mínimo, bloquea el codificador MSL, los codificadores de Ghostscript y el delegadogs. - Si los archivos se guardaban con el servicio Disk, cambia
secret_key_base, la clave maestra, todo lo que contienecredentials.yml.enc, las contraseñas de bases de datos y almacenamiento y los tokens de terceros. El aviso pide no conservar el secreto antiguo como respaldo. - Si tu aplicación genera PDF o PostScript con ImageMagick, vuelve a permitir solo los codificadores que necesite después de aplicar la política.
Los usuarios de webs hechas con Rails no tienen que instalar nada. Su riesgo es que se filtren los datos de clientes de una tienda o servicio sin actualizar, y eso depende de lo rápido que actualicen sus desarrolladores.