Rails исправил критическую уязвимость Active Storage с CVSS 9,8

Проект Ruby on Rails устранил критическую уязвимость в Active Storage с оценкой CVSS 9,8 из 10: при обработке специально подготовленной загрузки через ImageMagick неаутентифицированный атакующий мог записывать произвольные файлы на сервер. Исправления вошли в Rails 8.1.4.1 и 8.0.5.2; уязвимость отслеживается как GHSA-f3w6-w445-fwh9 и пока не получила идентификатор CVE.
Как возникает атака
Проблема находится в Active Storage — компоненте Rails для работы с прикреплёнными файлами. Она затрагивает приложения, которые используют ImageMagick для обработки изображений через настройку config.active_storage.variant_processor = :mini_magick, принимают загрузки от недоверенных пользователей и не имеют политики ImageMagick, блокирующей задействованные кодеки.
ImageMagick выбирает обработчик формата, или coder, по содержимому файла. Часть таких обработчиков может обращаться к файлам, указанным внутри изображения. Active Storage не ограничивал набор доступных coders, поэтому защитой оставалась только системная политика ImageMagick.
Уязвимый путь достигается уже в момент прикрепления файла: анализатор ImageMagick запускается автоматически. Приложению не нужно создавать вариант изображения, предпросмотр или отдельно вызывать анализ. В коммите с исправлением указано, что загруженный SVG мог попасть к MSL — скриптовому coder ImageMagick, способному читать и записывать файлы по именам из сценария.
Чем опасен доступ к файлам
Особенно серьёзны последствия для приложений, использующих Disk service Active Storage, когда вложения сохраняются на диске сервера. В таком случае атакующий потенциально способен не только записывать, но и читать файлы, доступные процессу приложения.
Rails отмечает, что среди таких данных обычно находятся secret_key_base и учётные данные для внешних систем. Их раскрытие может создать условия для удалённого выполнения кода или перехода к другим системам. Об одном сценарии атаки проекту сообщил исследователь RyotaK из GMO Flatt Security через HackerOne, однако в advisory подчёркнуто, что он может быть не единственным. Сведений об эксплуатации уязвимости в публикации нет.
Какие версии обновить
Затронуты все версии Active Storage до 8.0.5.2, а также ветка 8.1 до 8.1.4.1. Поддерживаемые исправленные релизы устраняют в сумме 21 проблему безопасности. В эти же версии включено исправление второй уязвимости Active Storage — GHSA-v924-7rp8-4mxh с CVSS 8,8, связанной с выбором декодера ImageMagick и FFmpeg по расширению временного файла.
Для приложений на :mini_magick также нужен gem MiniMagick версии 5.1 или новее, иначе приложение завершится с ошибкой при запуске. В Rails 8.0 поддержка security-исправлений, согласно политике сопровождения, действует до 7 ноября 2026 года. Для серий старше 8.0 обновления выпускаться не будут.
Что проверить после обновления
Новые версии поставляют политику ImageMagick, которая блокирует MSL, обработчики чтения или удаления сторонних файлов, удалённые и локальные ссылки, обработчики на базе Ghostscript, делегат gs и подстановку @filename. Политику можно проверить командой bin/rails runner 'puts MiniMagick.identify { |i| i.list "policy" }'.
Защита не применяется, если приложение после запуска заменяет MiniMagick.cli_env, очищает окружение через MiniMagick.cli_prefix или использует собственный MiniMagick::Shell. В таких случаях правила следует перенести в системный policy.xml ImageMagick. GraphicsMagick эту политику не читает, а разрешающее правило в системной политике, включая шаблон pattern="*", может перекрыть запрет.
Если обновление пока невозможно, Rails рекомендует скопировать правила из activestorage/lib/active_storage/image_magick/policy.xml в системную политику ImageMagick и как минимум запретить MSL, coders Ghostscript и делегат gs. При использовании Disk service после потенциальной компрометации необходимо сменить secret_key_base, мастер-ключ, данные из config/credentials.yml.enc, учётные данные хранилища и базы данных, а также внешние токены. Для бизнеса практический приоритет — быстро обновить Rails, удостовериться в загрузке политики и провести ротацию всех секретов, которые мог прочитать процесс приложения.

