Vulnerabilidad crítica en Rails permite acceso no autorizado a archivos del servidor
Publicado el
Vulnerabilidad crítica en Ruby on Rails
Ruby on Rails ha anunciado la existencia de una vulnerabilidad crítica en su componente Active Storage, que permite a atacantes no autenticados leer archivos arbitrarios de los servidores de aplicaciones a través de cargas de imágenes manipuladas. Esta vulnerabilidad, identificada como CVE-2026-66066, tiene un CVSS de 9.5, lo que indica su alta gravedad.
Impacto de la vulnerabilidad
La falla puede exponer el entorno del proceso de Rails y secretos sensibles como el secret_key_base, la clave maestra de Rails, contraseñas de bases de datos, credenciales de almacenamiento en la nube y tokens de API. Estos secretos podrían ser utilizados para ejecutar código de forma remota (RCE) o para moverse lateralmente hacia sistemas conectados.
Las aplicaciones afectadas son aquellas que utilizan libvips para el procesamiento de imágenes en Active Storage y permiten cargas de imágenes de usuarios no confiables. Rails selecciona Vips como procesador por defecto en las versiones 7.0 y posteriores, manteniendo esta configuración en versiones posteriores.
Versiones afectadas
Ethiack y GMO Flatt Security han identificado las versiones vulnerables como 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. Rails 6.0.0 hasta 6.1.7.10 solo se ven afectados si Active Storage está configurado para usar Vips, que no era el procesador por defecto en Rails 6. Además, el aviso oficial menciona un rango de paquetes más amplio: activestorage < 7.2.3.2. Los caminos de ataque prácticos se encuentran en Rails 6.0 y versiones posteriores.
Recomendaciones de seguridad
Los operadores deben actualizar sus aplicaciones a Rails 7.2.3.2, 8.0.5.1 o 8.1.3.1 y rotar todos los secretos que puedan ser leídos por el proceso de la aplicación. Las instalaciones corregidas requieren libvips 8.13 o versiones posteriores y, si se tiene instalado ruby-vips, la versión debe ser 2.2.1 o superior. Las versiones de Rails 7.0 y 7.1 han llegado al final de su vida útil y no recibirán correcciones, por lo que es esencial actualizar a Rails 7.2.3.2 o posterior.
Medidas temporales
Para las aplicaciones que no pueden actualizar de inmediato, se recomienda configurar VIPS_BLOCK_UNTRUSTED al utilizar libvips 8.13 o versiones posteriores, o invocar Vips.block_untrusted(true) con ruby-vips 2.2.1 o superior. Rails advirtió que aplicar el parche no invalida las credenciales que ya pueden haber sido robadas.
Conclusiones
La vulnerabilidad se sitúa en el límite de confianza entre Active Storage y libvips. Rails ha señalado que libvips admite cargadores, guardadores y otras operaciones, algunas respaldadas por bibliotecas de terceros y marcadas como "no seguras". Esto permitió que una carga manipulada invocara operaciones inseguras y divulgara archivos accesibles por el trabajador de Rails. No es necesario que una aplicación vulnerable exponga una operación dedicada de redimensionamiento o miniatura.
Los investigadores han indicado que aún no se ha publicado un proof-of-concept (PoC) de esta vulnerabilidad, y hasta la fecha, no se ha informado de explotación en el mundo real. Se espera que Rails publique más detalles técnicos antes del 28 de agosto de 2026. Mientras tanto, se insta a los desarrolladores a tomar medidas inmediatas para proteger sus aplicaciones.