Introducción a Ruby on Rails
Ruby on Rails (Rails) es un marco de trabajo web de ciclo completo, basado en el patrón Modelo-Vista-Controlador (MVC), desarrollado en Ruby. Viene «con todo incluido», ofreciendo a los desarrolladores todo lo que necesitan desde el primer momento: un mapeador objeto-relacional (Active Record), una capa de solicitud/respuesta y vista (Action Pack/Action View), procesamiento de tareas en segundo plano, envíos de correo, compatibilidad con WebSocket, almacenamiento y subida de archivos (Active Storage), y mucho más.
Desde su lanzamiento inicial en 2004, Ruby on Rails se ha convertido en uno de los marcos de desarrollo web más utilizados del mundo. En la actualidad, da servicio a millones de sitios web y aplicaciones, entre las que se incluyen plataformas de gran renombre como GitHub, Shopify, Airbnb, Basecamp y Netflix. Gracias a su firme apuesta por el principio de «convención sobre configuración», la productividad de los desarrolladores y la creación rápida de prototipos, Rails se ha convertido en el marco de referencia tanto para startups como para grandes empresas.
Investigación de Unit 515: revelación de vulnerabilidades críticas en Rails
Durante una investigación independiente, Thai Do, miembro del equipo de la Unidad 515 OPSWAT, identificó dos vulnerabilidades en Ruby on Rails, una de las cuales podía dar lugar a la ejecución remota de código (RCE). Estos hallazgos se comunicaron de forma responsable al equipo de seguridad de Rails, con el que OPSWAT durante todo el proceso.
El 13 de agosto de 2025, el equipo de Rails publicó avisos públicos y lanzó versiones corregidas que solucionaban ambas vulnerabilidades.
Versiones afectadas y versiones corregidas
Componente | Versiones afectadas | Versiones corregidas |
|---|---|---|
Almacenamiento activo (CVE-2025-24293) | Rails 5.2.0 o versiones anteriores a la versión estable | 7.1.5.2, 7.2.2.2, 8.0.2.1 |
Registro de Active Record (CVE-2025-55193) | Rails < 7.1.5.2, < 7.2.2.2, < 8.0.2.1 | 7.1.5.2, 7.2.2.2, 8.0.2.1 |
Problemas de seguridad detectados en Rails
CVE-2025-24293 – Métodos de transformación inseguros en Active Storage
Esta vulnerabilidad afecta a Active Storage en las versiones de Rails ≥ 5.2.0. Se produce cuando se pasan métodos de transformación de imágenes no seguros a mini_magick, lo que, si se combina con entradas de usuario no validadas, podría dar lugar a la ejecución remota de código (RCE). Aunque Rails señala que la vulnerabilidad no es explotable con la configuración predeterminada, las aplicaciones que permiten a los usuarios modificar las opciones de transformación corren un riesgo especial.
CVE-2025-55193 – Inyección de caracteres de escape ANSI en el registro de Active Record
Esta vulnerabilidad afecta al registro de Active Record en todas las versiones de Rails anteriores a la 7.1.5.2, la 7.2.2.2 y la 8.0.2.1. Los atacantes podrían inyectar en los registros identificadores diseñados específicamente que contengan secuencias de escape ANSI, lo que podría manipular la forma en que las consultas aparecen en la salida del terminal y dar lugar a registros engañosos o dañados. Aunque la falla no expone directamente los datos ni permite la ejecución de código, podría dificultar las tareas de supervisión y respuesta ante incidentes. El equipo de seguridad de Rails resolvió el problema en las mismas versiones parcheadas.
Análisis técnico de CVE-2025-24293: ejecución remota de código en Active Storage
Descripción general del almacenamiento activo
Active Storage es el marco integrado en Rails para gestionar la subida de archivos. Permite a los desarrolladores adjuntar archivos a modelos de Active Record y almacenarlos bien de forma local (para desarrollo o pruebas) o en servicios en la nube como Amazon S3, Google Cloud o Microsoft Azure. Entre Core se incluyen la transformación de imágenes, la generación de vistas previas para archivos que no son imágenes, como PDF y vídeos, y la duplicación de las subidas en varios servicios con fines de redundancia o migración.
Cómo funcionan las transformaciones de imágenes
Las transformaciones de imágenes permiten a los desarrolladores enviar archivos adjuntos con dimensiones o formatos específicos. Para ello, se invoca el método variant() sobre un archivo adjunto de imagen y se le pasan las operaciones compatibles.

Cuando un cliente solicita una URL variante, Active Storage realiza la transformación bajo demanda a partir del blob original, almacena el resultado en el servicio configurado y devuelve una redirección al archivo recién generado.
Rails admite dos procesadores para la transformación de imágenes: Vips y MiniMagick. El procesador que se utiliza se puede configurar mediante config.active_storage.variant_processor.

Las operaciones específicas que se admiten en las transformaciones de imágenes vienen determinadas por la gema `image_processing ` y dependen del procesador subyacente que se haya configurado para la aplicación Rails.
Solución incompleta de CVE-2022-21831
En marzo de 2022, el equipo de Rails dio a conocer CVE-2022-21831, una vulnerabilidad crítica de inyección de código en la función de transformación de imágenes de Active Storage. El parche introdujo una lista de métodos de transformación permitidos por defecto para mitigar el problema.

Sin embargo, tras un análisis más detallado del parche y del código fuente de Rails, Thai Do (OPSWAT 515) descubrió una forma de eludir la seguridad que hacía que la corrección original resultara incompleta. Esta vulnerabilidad permitía a los atacantes volver a ejecutar código de forma remota (RCE), lo que dio lugar a la publicación de CVE-2025-24293.
Causa principal en la gema image_processing
Cuando se aplica una transformación, Rails delega la operación a la gema image_processing, que a su vez llama a ImageProcessing::Processor#call en lib/image_processing/processor.rb

Si el procesador de variantes configurado es MiniMagick, la vulnerabilidad se encuentra en dos funciones de lib/image_processing/mini_magick.rb:
• load_image: acepta opciones no validadas de **loader.
• save_image: acepta opciones no validadas de **saver.

En el caso de `load_image`, todos los pares clave-valor de **loader que no sean `page`, `geometry` y `auto_orient` se conservan en **options. Lo mismo ocurre con `save_image`, donde las claves que no sean `allow_splitting` permanecen en **options. Estas opciones se pasan posteriormente a `Utils.apply_options(magick, **options)`, que las aplica como opciones de la línea de comandos de MiniMagick (por ejemplo, `-quality`).

Aunque «loader» y «saver» figuran en la lista de permitidos por defecto y, por lo tanto, se consideran seguras, esta confianza es errónea. Con una entrada cuidadosamente elaborada, un atacante puede aprovechar estas opciones para eludir los controles y, en última instancia, hacer que Rails ejecute comandos arbitrarios del sistema en la máquina host.
Escenario de vulnerabilidad en aplicaciones Rails
Si una aplicación pasa datos de usuario sin validar directamente a los métodos de transformación, por ejemplo:

Un atacante podría crear entradas maliciosas para manipular las opciones del cargador o del guardador. Esto permitiría eludir la lista de permitidos y ejecutar comandos arbitrarios en el servidor, lo que daría lugar a la ejecución remota de código (RCE).
Demostración de concepto: ejecución remota de código
En las aplicaciones Rails que ejecutan versiones vulnerables (anteriores a la 8.0.2.1, la 7.2.2.2 y la 7.1.5.2), OPSWAT 515 demostró con éxito una cadena de explotación en la que una entrada de transformación no validada daba lugar a la ejecución de comandos de shell.
Este vídeo de prueba de concepto demuestra que la vulnerabilidad CVE-2025-24293 puede ser explotada y pone de relieve el impacto real que tiene en las aplicaciones Rails:
Servicios de mitigación y pruebas de penetración profesionales
Las organizaciones deben abordar los vulnerabilidades CVE-2025-24293 y CVE-2025-55193 actualizando Ruby on Rails a las últimas versiones de seguridad (7.1.5.2, 7.2.2.2 u 8.0.2.1). Si no es posible aplicar los parches de inmediato, las medidas de seguridad provisionales incluyen restringir las transformaciones de imágenes a ajustes predefinidos, validar y depurar las entradas de los usuarios, reforzar las políticas de ImageMagick y asegurarse de que los registros no puedan interpretar secuencias de escape ANSI.
Sin embargo, la aplicación de parches no elimina todos los riesgos en los entornos web modernos. La lógica de negocio personalizada, las integraciones de terceros y los complejos procesos de implementación suelen crear vías de vulnerabilidad que van más allá de los avisos de los proveedores. Por eso son esenciales las pruebas de penetración de aplicaciones web .
En OPSWAT, la Unidad 515 ofrece servicios especializados de pruebas de penetración de aplicaciones web que van mucho más allá de los escáneres automatizados o las auditorías basadas en listas de verificación. Nuestro equipo está formado por expertos en seguridad ofensiva con una dilatada trayectoria, que aportan años de experiencia en la evaluación de aplicaciones a gran escala en diversos sectores. Mediante una metodología sistemática y basada en el enfoque adversarial, detectamos vulnerabilidades en los flujos de autenticación, la validación de entradas, el control de acceso y el tratamiento de datos, problemas que pueden persistir incluso en marcos totalmente actualizados, como Ruby on Rails.
Cada proyecto combina una profunda experiencia técnica con informes adaptados a las necesidades de las empresas, lo que proporciona información clara y útil que permite a los equipos de desarrollo corregir los fallos de manera eficaz. Al contratar a Unit 515, las organizaciones obtienen la garantía de que sus aplicaciones críticas son sometidas a pruebas por expertos que no solo simulan técnicas de ataque reales, sino que también verifican que las correcciones subsanan realmente las vulnerabilidades. Esta experiencia refuerza las medidas de corrección, reduce el riesgo residual y mejora la resiliencia general de las aplicaciones frente a las amenazas en constante evolución.
