Una vulnerabilidad crítica en Ruby on Rails podría permitir que un atacante no autenticado escriba archivos arbitrarios en un servidor al cargar un archivo manipulado, si la aplicación procesa las cargas con ImageMagick. Rails divulgó el problema en un aviso de seguridad y publicó correcciones en las versiones 8.1.4.1 y 8.0.5.2.

La falla afecta a Active Storage, el componente de Rails para cargar archivos. Las aplicaciones están en riesgo cuando usan ImageMagick para procesar cargas, aceptan archivos de usuarios no confiables y tienen una política de seguridad de ImageMagick que no bloquea los codificadores pertinentes. Rails señala que las políticas incluidas en Debian y Ubuntu no los bloquean.

El riesgo puede ir más allá de la escritura de archivos. Las aplicaciones que usan el servicio Disk de Active Storage almacenan los archivos cargados en el servidor, y un atacante también podría leer archivos a los que tenga acceso la aplicación. Estos pueden incluir secret_key_base de Rails y credenciales de otros sistemas, lo que podría posibilitar nuevas intrusiones, incluida la ejecución remota de código o el movimiento hacia sistemas conectados.

Rails califica la vulnerabilidad con 9,8 sobre 10 en la escala CVSS. Está registrada como GHSA-f3w6-w445-fwh9 y no tiene identificador CVE. RyotaK, investigador de GMO Flatt Security, informó del problema a través de HackerOne. Rails dijo que recibió un informe sobre una cadena de ataque, aunque advirtió que podrían existir otros métodos; el aviso no indica si la falla ha sido explotada.

Se llega a la ruta vulnerable cuando Active Storage analiza un archivo adjunto cargado. No es necesario generar una variante ni una vista previa, y la aplicación tampoco tiene que llamar al método analyze. Según el commit de la corrección, un SVG cargado podía llegar al codificador MSL de ImageMagick, que puede leer y escribir los archivos indicados en su script. Active Storage no restringía qué codificadores de ImageMagick podían procesar una carga, por lo que la política de ImageMagick del servidor era el único control.

Todas las versiones de Active Storage anteriores a la 8.0.5.2 están afectadas, al igual que las versiones 8.1 anteriores a la 8.1.4.1. Rails indica que las series anteriores a la 8.0 no tienen soporte y no recibirán versiones corregidas. La configuración pertinente es config.active_storage.variant_processor: :mini_magick usa ImageMagick, mientras que el valor predeterminado depende del ajuste load_defaults de la aplicación. Ese ajuste también determina qué biblioteca analiza las cargas.

Las mismas versiones corrigen otra vulnerabilidad de Active Storage, GHSA-v924-7rp8-4mxh, calificada con 8,8 en la escala CVSS. En ese caso, las cargas se enviaban a ImageMagick y FFmpeg con nombres de archivo temporales que conservaban sus extensiones, lo que potencialmente permitía que un atacante influyera en el decodificador encargado de procesar un archivo. Rails afirma que las dos versiones corrigen 21 problemas de seguridad en total.

Rails recomienda encarecidamente actualizar. Las aplicaciones que usan :mini_magick también necesitan mini_magick 5.1 o una versión posterior; de lo contrario, podrían encontrar un error durante el inicio. Las versiones incluyen una política de ImageMagick que bloquea MSL, ciertos codificadores capaces de acceder a otros archivos o referencias, los codificadores respaldados por Ghostscript y el delegado gs, así como la indirección @filename.

Los administradores deben confirmar que la aplicación carga la nueva política y comprobar si una configuración personalizada de MiniMagick impide que surta efecto. La política complementa, pero no reemplaza, la política de ImageMagick del servidor, por lo que una regla existente que permita un codificador puede anular el nuevo bloqueo. La política incluida no protege las aplicaciones que usan GraphicsMagick.

Si no es posible actualizar, Rails recomienda aplicar las reglas de la política incluida a la política del sistema de ImageMagick y, como mínimo, bloquear MSL, los codificadores de Ghostscript y el delegado gs. Para las aplicaciones que usan el servicio Disk, Rails también aconseja cambiar secret_key_base y todos los demás secretos que pueda leer la aplicación, incluidas las credenciales, las contraseñas del almacenamiento y de la base de datos, y los tokens de terceros. El aviso no ofrece un método para determinar si una aplicación ya ha sido objeto de un ataque.

Fuentes: The Hacker News.