КИБЕРБЕЗОПАСНОСТЬ

Критическая уязвимость Rails позволяет писать файлы на сервер

Rails исправил критическую ошибку с оценкой 9,8 CVSS: через загрузку изображения атакующий может записывать файлы на сервер приложения.

✍️ Редакция iTech News | 05.11.2026 | ⏱ 3 мин | Источник: The Hacker News
Критическая уязвимость Rails позволяет писать файлы на сервер

Уязвимость Ruby on Rails с оценкой 9,8 из 10 по CVSS позволяет неаутентифицированному пользователю записывать произвольные файлы на сервер через специально подготовленную загрузку. Под ударом приложения, которые принимают файлы от внешних пользователей и обрабатывают их через ImageMagick: для команды это не очередной пункт в бэклоге обновлений, а повод срочно проверить конфигурацию и сменить секреты.

Проблема находится в Active Storage — встроенном механизме Rails для работы с вложениями, сообщает The Hacker News. Rails выпустил исправления в версиях 8.1.4.1 и 8.0.5.2; идентификатор проблемы — GHSA-f3w6-w445-fwh9. CVE для неё пока не назначен. Ошибку через HackerOne обнаружил исследователь RyotaK из GMO Flatt Security.

Опасная цепочка возникает при сочетании трёх условий: приложение использует ImageMagick для обработки изображений в Active Storage, политика безопасности ImageMagick не блокирует задействованные обработчики, а загрузки доступны недоверенным пользователям. Наиболее вероятная зона риска — старые приложения: для проектов с load_defaults 6.1 и ниже MiniMagick был стандартным обработчиком. Начиная с Rails 7.0 по умолчанию используется vips, но настройки конкретного проекта важнее версии фреймворка.

Техническая деталь здесь особенно неприятна: Active Storage запускает анализ файла уже при его прикреплении. Атакующему не нужно дождаться генерации превью, варианта картинки или отдельного вызова analyze. В описанной Rails цепочке загруженный SVG доходил до MSL — скриптового кодера ImageMagick, который умеет читать и записывать файлы, названные внутри сценария. ImageMagick выбирает кодер по содержимому файла, а прежнее поведение Active Storage не ограничивало набор доступных кодеров.

Если приложение хранит вложения через Disk service, последствия выходят за пределы испорченного файлового хранилища. Злоумышленник может получить доступ к файлам, которые способен прочитать процесс приложения: прежде всего к secret_key_base, мастер-ключу, данным из credentials.yml.enc, учётным данным БД, storage-провайдеров и внешних сервисов. Rails прямо предупреждает: чтение таких данных способно стать ступенью к удалённому выполнению кода или перемещению по инфраструктуре. Сам факт успешной эксплуатации в advisory не подтверждён, но разработчики Rails не считают известную цепочку единственной возможной.

Вместе с этим исправлением закрыта ещё одна серьёзная ошибка Active Storage — GHSA-v924-7rp8-4mxh с CVSS 8,8. Раньше временные файлы, передаваемые ImageMagick и FFmpeg, сохраняли расширение исходной загрузки. Если содержимое не позволяло однозначно определить формат, атакующий мог влиять на выбор декодера через имя файла и заявленный MIME-тип. В новых релизах Rails закрыто в сумме 21 проблема безопасности — достаточно ясный сигнал не откладывать обновление до очередного планового окна.

Для команд практический минимум такой: обновить Rails до 8.1.4.1 либо 8.0.5.2 и при использовании MiniMagick поставить версию gem не ниже 5.1, иначе приложение не загрузится. Затем нужно убедиться, что политика действительно применяется: Rails предлагает проверить её командой bin/rails runner 'puts MiniMagick.identify { |i| i.list "policy" }'. Встроенная политика блокирует MSL, опасные кодеры чтения и удаления сторонних файлов, обращения к локальным и удалённым ресурсам, Ghostscript-кодеры и механизм @filename.

Проверка не должна заканчиваться успешным деплоем. Собственные настройки MiniMagick могут отключить доставку политики: риск возникает, например, при замене MiniMagick.cli_env, очистке окружения через cli_prefix или использовании собственного MiniMagick::Shell. GraphicsMagick этой защитой также не покрывается, потому что не читает политики ImageMagick. Наконец, системное правило ImageMagick, разрешающее кодер — особенно шаблон вроде pattern="*", — способно перекрыть запрет из Rails.

Проекты на ветках старше 8.0 официального патча не получат: им придётся переносить правила из политики Active Storage в системный policy.xml ImageMagick или планировать обновление платформы. Если сервер использовал Disk service, после устранения уязвимости Ruby on Rails следует считать потенциально скомпрометированными все доступные процессу секреты и заменить их без сохранения старых значений «на всякий случай». Эта история снова показывает, что обработка файлов — не вспомогательная функция: библиотека конвертации изображений легко становится границей безопасности всего приложения.

Поделиться: Telegram X LinkedIn