Загруженная картинка позволяет записывать файлы на серверы с Ruby on Rails
В 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 устанавливать ничего не нужно. Риск для них в том, что из необновлённого магазина или сервиса утекут данные клиентов, а это зависит от того, как быстро обновятся его разработчики.