Загруженная картинка позволяет записывать файлы на серверы с Ruby on Rails

04.11.2026 3 мин 7

В Ruby on Rails, веб-фреймворке, на котором работают многие интернет-магазины, SaaS-сервисы и стартапы, закрыли критическую уязвимость: злоумышленник без всякого аккаунта мог записать на сервер произвольные файлы, просто загрузив специально собранную картинку. Ошибка нашлась в Active Storage, компоненте Rails для загрузки файлов, и затрагивает приложения, которые обрабатывают изображения через ImageMagick. Ей присвоена оценка 9,8 из 10, говорится в бюллетене безопасности Rails. Исправление вышло 4 ноября в версиях Rails 8.0.5.2 и 8.1.4.1.

Как одна загрузка ломает сервер

ImageMagick определяет, как читать файл, по его содержимому, а не по имени. Некоторые его «кодеры» не просто декодируют картинку: они выполняют инструкции внутри файла и читают или записывают другие файлы на диске. Active Storage ни один из них не ограничивал и запускает анализатор ImageMagick сразу при прикреплении файла. «Достаточно прикрепить загруженный файл, вызывать вариант, превью или analyze не нужно», сказано в бюллетене.

Если приложение хранит загрузки на локальном диске (сервис Disk), атакующий может ещё и прочитать любой файл, доступный приложению. Обычно среди них secret_key_base и учётные данные баз данных, облачных хранилищ и сторонних сервисов. С ними, предупреждают в бюллетене, можно добраться до удалённого выполнения кода или перейти на связанные системы. Об уязвимости сообщил исследователь HackerOne под ником ryotak. В Rails говорят, что им передали одну цепочку атаки, «но мы не исходим из того, что она единственная».

Какие приложения уязвимы

Приложение уязвимо, если выполняются все три условия:

  • Картинки обрабатывает ImageMagick. Это процессор вариантов :mini_magick, он стоит по умолчанию в приложениях с load_defaults 6.1 и ниже. Начиная с Rails 7.0 новые приложения используют libvips, так что они под угрозой, только если их вернули на ImageMagick.
  • ImageMagick работает без строгой политики. Политики из пакетов Debian и Ubuntu нужные кодеры не блокируют.
  • Чужие люди могут загружать файлы: аватарки, фото товаров, вложения в обращения в поддержку.

Уязвимы версии activestorage до 8.0.5.2 и ветка 8.1 до 8.1.4.1. Для старых веток исправления не будет: команда Rails пишет, что более ранние версии не поддерживаются, и советует перейти хотя бы на 8.0, хотя и у неё поддержка безопасности заканчивается 7 ноября 2026 года. Тот же выпуск закрывает ещё 20 проблем безопасности, четыре из них высокой степени, в том числе отдельную ошибку в превью видео, которая могла привести к выполнению кода через FFmpeg.

Об атаках в реальных условиях в бюллетене ничего не сказано. Но после выхода исправления злоумышленники могут сравнить старый и новый код и понять, где была дыра, так что каждый день без обновления повышает риск.

Что делать разработчикам

  • Обновитесь до Rails 8.0.5.2 или 8.1.4.1. Если используете mini_magick, нужна и версия mini_magick 5.1 или новее, иначе приложение упадёт при запуске.
  • Если сразу обновиться нельзя, перенесите политику ImageMagick из исправленного выпуска в системный policy.xml. Как минимум запретите кодер MSL, кодеры Ghostscript и делегат gs.
  • Если загрузки хранились в сервисе Disk, смените secret_key_base, мастер-ключ, всё содержимое credentials.yml.enc, пароли от баз и хранилищ и сторонние токены. В бюллетене советуют не оставлять старый секрет даже как запасной.
  • Если приложение рендерит PDF или PostScript через ImageMagick, после установки политики разрешите обратно только нужные ему кодеры.

Пользователям сайтов на Rails устанавливать ничего не нужно. Риск для них в том, что из необновлённого магазина или сервиса утекут данные клиентов, а это зависит от того, как быстро обновятся его разработчики.

ruby on railsimagemagickуязвимостьобновление безопасностиоткрытый кодсерверыутечка данныхкибербезопасность

Читайте также