Ruby on Rails ha lanzado actualizaciones de seguridad para una vulnerabilidad crítica en Active Storage que puede permitir a un atacante no autenticado leer archivos arbitrarios desde un servidor de aplicaciones a través de cargas de imágenes diseñadas. Rastreada como CVE-2026-66066 y con una calificación de 9.5 en la escala CVSS, la falla puede exponer secretos accesibles al proceso de Rails y potencialmente habilitar la ejecución de código remoto o el movimiento lateral en sistemas conectados.
El problema se origina en la interacción entre Active Storage y libvips, la biblioteca de procesamiento de imágenes seleccionada por aplicaciones de Rails que usan load_defaults 7.0 y versiones posteriores por defecto. En una configuración predeterminada de Rails que acepta cargas de imágenes de usuarios no confiables, las operaciones inseguras de libvips pueden procesar un archivo malicioso y divulgar datos que nunca deberían ser accesibles a través de una imagen cargada.
Los detalles más importantes de CVE-2026-66066 se refieren a la sensibilidad de la información potencialmente expuesta. Un atacante puede recuperar el entorno del proceso de Rails, secret_key_base, la clave maestra de Rails, credenciales de la base de datos, claves de almacenamiento en la nube y tokens de API de terceros. Dependiendo de los secretos obtenidos, el ataque puede progresar desde la divulgación arbitraria de archivos hasta la falsificación de sesiones, comprometer la aplicación o acceder a infraestructuras externas.
Análisis de CVE-2026-66066
La debilidad reside en el procesamiento de variantes de Active Storage cuando la aplicación utiliza libvips. Libvips admite numerosos cargadores, salvadores y otras operaciones para manejar formatos de archivo. Algunas de estas operaciones dependen de bibliotecas de terceros y se clasifican como «no testeadas» o no confiables porque no son seguras para procesar entradas hostiles.
Active Storage no bloqueó estas operaciones antes de pasar archivos adjuntos cargados al analizador y transformador de Vips. Como resultado, una carga diseñada puede invocar una operación insegura y obtener el contenido de archivos arbitrarios legibles por el trabajador de Rails.
En los escenarios más graves, los atacantes leen archivos del servidor a través de cargas de imágenes y recuperan valores sensibles del entorno de la aplicación. La falla no requiere una función dedicada de redimensionamiento o miniatura para ser expuesta. Según el aviso de Rails, generar variantes de imagen no es un requisito separado para que una aplicación sea vulnerable.
CVE-2026-66066 afecta a aplicaciones que cumplen con ambas de las siguientes condiciones:
- Usan libvips para el procesamiento de imágenes de Active Storage, típicamente mediante config.active_storage.variant_processor = :vips.
- Permiten que usuarios no confiables carguen imágenes.
Los rangos afectados reportados incluyen Rails 7.0.0 hasta 7.2.3.1, Rails 8.0.0 hasta 8.0.5 y Rails 8.1.0 hasta 8.1.3. Las aplicaciones Rails 6.0 y 6.1 también pueden estar expuestas cuando los administradores configuran explícitamente Vips como el procesador de imágenes, aunque no era la configuración predeterminada para esas versiones. Las aplicaciones que usan MiniMagick en lugar de Vips no están expuestas a través de esta ruta de ataque en particular.
Una vez que se logra la lectura arbitraria de archivos, los atacantes pueden apuntar a:
- secret_key_base
- config/master.key o la variable de entorno RAILS_MASTER_KEY
- Secretos descifrados de config/credentials.yml.enc
- Nombres de usuario y contraseñas de bases de datos
- Claves de almacenamiento de Amazon S3, Google Cloud Storage o Azure
- Tokens para servicios de pago, mensajería, monitoreo y otros servicios de terceros
Obtener secret_key_base puede ser particularmente peligroso porque Rails lo utiliza para proteger datos firmados y encriptados de la aplicación. Dependiendo de la aplicación y las cadenas de dispositivos disponibles, un valor robado puede permitir a un atacante falsificar datos de confianza y potencialmente progresar a la ejecución de código. Las credenciales de la nube o API también pueden soportar el movimiento lateral más allá del servidor Rails comprometido.
Un PoC de CVE-2026-66066 de terceros apareció poco después de la divulgación coordinada y afirma reproducir una cadena de lectura de archivos arbitrarios a RCE en un entorno aislado de Docker. The Hacker News no había verificado independientemente ese código en el momento de su informe actualizado, mientras que los equipos de investigación originales habían retenido intencionalmente mecánicas de explotación detalladas para dar tiempo a los administradores para parchear.
Actualmente no hay IOCs de CVE-2026-66066 publicados por el proveedor ni informes confirmados de explotación en el entorno salvaje. El Equipo de Seguridad de Rails dijo que no tenía conocimiento de intentos de explotación antes o después de la divulgación, pero la ausencia de ataques conocidos no debe interpretarse como evidencia de que las aplicaciones expuestas son seguras.
Mitigación de CVE-2026-66066
Los administradores deben actualizar Active Storage a una de las siguientes versiones corregidas:
- Rails 7.2.3.2 o posterior
- Rails 8.0.5.1 o posterior
- Rails 8.1.3.1 o posterior
Rails 7.0 y 7.1 ya no cuentan con soporte de seguridad y no recibirán una corrección retroactiva. Las aplicaciones que ejecutan esas ramas deben migrar a Rails 7.2.3.2 o a una versión más reciente compatible.
La configuración corregida también requiere libvips 8.13 o posterior. Las aplicaciones que utilizan directamente la gema ruby-vips deben ejecutar ruby-vips 2.2.1 o posterior. La corrección llama a Vips.block_untrusted(true) durante la inicialización de Active Storage, evitando que operaciones inseguras de libvips procesen cargas hostiles.
Actualizar cierra la ruta de procesamiento vulnerable, pero no invalida los secretos que ya pueden haber sido divulgados. Las organizaciones deben tratar cada valor legible por el proceso de la aplicación Rails como potencialmente comprometido y rotarlo. Esto incluye secretos de firma de aplicaciones, claves maestras, credenciales de base de datos, claves de servicios de almacenamiento y tokens de terceros.
Cambiar secret_key_base invalidará las sesiones activas y requerirá que los usuarios inicien sesión nuevamente. También afecta las cookies encriptadas, las cookies firmadas, las IDs globales firmadas y las URL de Active Storage emitidas previamente. Los administradores no deben retener un secreto expuesto como una alternativa después de la rotación.
Cuando una actualización inmediata de Rails no es posible, las aplicaciones que utilizan libvips 8.13 o posterior pueden configurar la siguiente variable de entorno:
VIPS_BLOCK_UNTRUSTED
Las aplicaciones que utilizan ruby-vips 2.2.1 o posterior pueden alternativamente agregar la siguiente llamada a un inicializador:
Vips.block_untrusted(true)
Las versiones de libvips anteriores a 8.13 no pueden bloquear las operaciones inseguras. En esos entornos, no hay una solución segura solo de configuración. Los administradores deben actualizar libvips o eliminar la dependencia, por ejemplo, eliminando ruby-vips del Gemfile donde no sea necesario.
La detección de CVE-2026-66066 debe comenzar con un inventario de aplicaciones que usen Active Storage, Vips y cargas de imágenes no confiables. Los equipos de seguridad deben revisar los registros de aplicaciones y proxy en busca de actividad de carga inusual, formatos de imagen inesperados, errores repetidos de procesamiento de variantes y solicitudes seguidas de un uso sospechoso de sesión o credenciales.
Para detectar la exposición a CVE-2026-66066, los equipos deben verificar las versiones exactas de Active Storage, libvips y ruby-vips en lugar de confiar solo en la versión principal de Rails. Las aplicaciones también deben revisarse para evidencias de acceso no autorizado que impliquen credenciales que estuvieron disponibles para el proceso de Rails.
FAQ
¿Qué es CVE-2026-66066 y cómo funciona?
CVE-2026-66066 es una vulnerabilidad crítica de lectura de archivos arbitrarios en Active Storage de Ruby on Rails. Active Storage permitió que operaciones inseguras de libvips procesaran cargas controladas por el atacante, permitiendo que un usuario no autenticado recuperara archivos legibles por el proceso de aplicación de Rails. Los secretos de aplicación robados pueden luego apoyar la ejecución de código remoto o el movimiento lateral.
¿Cuándo se descubrió por primera vez CVE-2026-66066?
Las fechas de descubrimiento privado no se han divulgado públicamente. El problema fue reportado de forma independiente por investigadores de Ethiack y GMO Flatt Security, y el aviso de seguridad coordinado de Rails se publicó el 29 de julio de 2026.
¿Cuál es el impacto de CVE-2026-66066 en los sistemas?
El impacto directo es la divulgación arbitraria de archivos. Los atacantes pueden obtener secretos de firma de la aplicación, credenciales de Rails, contraseñas de bases de datos, claves de almacenamiento en la nube o tokens de terceros. Dependiendo de los datos expuestos y la configuración de la aplicación, el compromiso puede escalar hacia la falsificación de sesiones, la ejecución de código remoto o el acceso a servicios conectados.
¿Puede CVE-2026-66066 aún afectarme en 2026?
Sí. Las aplicaciones de Rails permanecen expuestas si utilizan una versión vulnerable de Active Storage, procesan imágenes con libvips y aceptan cargas de usuarios no confiables. Las aplicaciones fin de ciclo de vida de Rails 7.0 y 7.1 también están en riesgo y deben actualizarse a una versión soportada.
¿Cómo puedo protegerme de CVE-2026-66066?
Actualice a Rails 7.2.3.2, 8.0.5.1, 8.1.3.1 o una versión posterior; asegúrese de que libvips sea la versión 8.13 o más reciente; y use ruby-vips 2.2.1 o posteriores cuando sea aplicable. Rote todos los secretos disponibles para el proceso de aplicación y revise la actividad de carga para una posible explotación.