Назад
2026/11/05
Уязвимость в Rails Active Storage: проверьте три настройки до 7 ноября
Уязвимость в Rails Active Storage (CVSS 9.8) позволяет через загрузку одного изображения записывать файлы на сервер. Проверьте три настройки и обновитесь.
Почти любое приложение на Rails, которое принимает аватар, документ или фото товара, пропускает этот файл через Active Storage. 4 ноября 2026 года команда Rails опубликовала критический бюллетень безопасности, касающийся этого пути загрузки. В ряде распространённых конфигураций одна специально подготовленная загрузка позволяет неаутентифицированному атакующему записывать файлы на ваш сервер.
Уязвимы вы или нет, зависит от трёх настроек, которые легко проверить. В статье разобрано, в чём суть уязвимости, как проверить каждую настройку и что делать, если обновиться сегодня невозможно. Особенно это важно для команд на Rails 8.0: поддержка безопасности этой ветки заканчивается 7 ноября 2026 года.
Главное
- GHSA-f3w6-w445-fwh9 имеет оценку CVSS 9.8; на момент публикации идентификатора CVE у неё не было.
- Вы затронуты, только если выполняются все три условия: Active Storage использует ImageMagick, политика ImageMagick не блокирует опасные кодеры, а файлы могут загружать недоверенные пользователи.
- Исправление — Rails 8.1.4.1 или 8.0.5.2 вместе с mini_magick 5.1 или новее.
- Rails 8.0 получает исправления безопасности только до 7 ноября 2026 года, а для более старых веток исправлений не будет вовсе.
- Если вы используете сервис хранения Disk, дополнительно смените все секреты, которые может прочитать приложение.
В чём суть уязвимости
При прикреплении файла Active Storage запускает анализатор, который считывает базовые сведения, например размеры изображения. С процессором :mini_magick анализатор передаёт файл в ImageMagick. ImageMagick поддерживает множество форматов через модули, называемые кодерами (coders), и некоторые из них весьма мощные: коммит с исправлением показывает, как загруженный SVG добирается до кодера MSL — скриптового формата, способного читать и записывать файлы, указанные в его сценарии. Active Storage никак не ограничивал, до каких кодеров может дойти загрузка, поэтому единственной защитой оставалась политика ImageMagick на сервере.
Серьёзной проблему делают две детали. Во-первых, анализатор срабатывает при прикреплении, поэтому не нужны ни variant, ни превью, ни явный вызов analyze: достаточно принять загрузку. Во-вторых, приложения, хранящие файлы через сервис Disk, можно также заставить прочитать любой файл, доступный процессу приложения. В том числе secret_key_base и учётные данные других систем, что может привести к удалённому выполнению кода или горизонтальному перемещению по инфраструктуре.
Об уязвимости сообщил RyotaK из GMO Flatt Security через HackerOne. Команда Rails отмечает, что сообщено об одной цепочке атаки, и не исключает, что она не единственная. Эксплуатировалась ли уязвимость, в бюллетене не сказано.
Проверка уязвимости по трём условиям
Вы затронуты, только если выполнены все три условия. Проверяйте их по порядку; если хотя бы одно не выполняется, эта цепочка атаки к вам неприменима, хотя обновиться всё равно правильно.
| Условие | Где смотреть | Уязвимо, если |
|---|---|---|
| 1. Процессор вариантов | config.active_storage.variant_processor и load_defaults | Значение — :mini_magick (по умолчанию при load_defaults 6.1 или ниже) |
| 2. Политика ImageMagick | Файл policy.xml на сервере | Она не блокирует MSL, кодеры Ghostscript и делегат gs (стандартные политики Debian и Ubuntu их не блокируют) |
| 3. Кто может загружать файлы | Ваши формы загрузки и API | Прикреплять файлы могут недоверенные пользователи |
1. Какой процессор использует Active Storage?
Поищите в конфигурации и спросите у работающего приложения:
grep -rn "variant_processor\|load_defaults" config/
bin/rails runner 'p Rails.application.config.active_storage.variant_processor'
Начиная с Rails 7.0 по умолчанию используется :vips, но приложения, обновлённые со старых версий, нередко по-прежнему загружают старые значения по умолчанию или явно задают :mini_magick. Проверьте также bundle info mini_magick: если gem есть в вашем bundle, выясните, где он используется.
2. Блокирует ли ваша политика ImageMagick опасные кодеры?
Выведите политику, которую ImageMagick реально загружает на каждом сервере приложения и каждом воркере:
magick -list policy # ImageMagick 7
convert -list policy # ImageMagick 6
Ищите правила с rights="none" для кодера MSL, кодеров PostScript и PDF, а также делегата gs. Если вы используете пакетную политику Debian или Ubuntu без изменений, считайте, что они не заблокированы. Помните, что в образах контейнеров и на хостах воркеров может работать иная сборка ImageMagick, чем на веб-серверах.
3. Могут ли файлы загружать недоверенные пользователи?
Составьте список всех мест, где файл попадает в attach, has_one_attached или has_many_attached, включая API, прямые загрузки и админ-инструменты, импортирующие файлы извне. Открытая регистрация с полем для аватара считается недоверенным источником.
Совет: Заодно проверьте, какой сервис хранения вы используете. Если в config/storage.yml продакшен-сервис задан как service: Disk, риск чтения файлов касается и вас, и после установки исправления секреты нужно сменить.
Исправление: путь обновления для каждой ветки
Исправленные релизы — Rails 8.1.4.1 и Rails 8.0.5.2. В сумме они закрывают 21 проблему безопасности, поэтому их стоит установить, даже если именно эта уязвимость вас не затрагивает.
| Ваша ветка | Что делать |
|---|---|
| 8.1 | Обновиться до 8.1.4.1 |
| 8.0 | Сейчас обновиться до 8.0.5.2, затем спланировать переход на 8.1: поддержка безопасности 8.0 заканчивается 7 ноября 2026 года |
| 7.2 и более ранние | Исправление выпущено не будет. Примените обходное решение с политикой (см. ниже) и обновитесь до 8.0 или новее |
Приложениям, использующим :mini_magick, также нужен mini_magick 5.1 или новее. Со старой версией исправленный релиз выдаёт ошибку при загрузке приложения, поэтому обновляйте оба gem одновременно и проверьте запуск на staging:
bundle update rails mini_magick
bundle info activestorage
bundle info mini_magick
Исправленные релизы поставляются с собственной политикой ImageMagick, но убедитесь, что она действительно доходит до ImageMagick. Она не применяется, если приложение после загрузки заменяет MiniMagick.cli_env, использует MiniMagick.cli_prefix или устанавливает собственный MiniMagick::Shell; таким приложениям нужны правила в системной политике. GraphicsMagick политики ImageMagick не читает вовсе. Кроме того, поставляемая политика дополняет policy.xml на вашем сервере, а не заменяет его, поэтому разрешающее правило в нём, в том числе с подстановочным знаком, перекрывает блокировку.
Эти же релизы закрывают вторую уязвимость — GHSA-v924-7rp8-4mxh (CVSS 8.8). Active Storage передавал загрузки в ImageMagick и FFmpeg под временными именами, сохранявшими исходное расширение файла, поэтому атакующий, контролирующий имя файла и заявленный тип содержимого, мог влиять на выбор декодера. Обходные решения Rails для этой уязвимости охватывают только FFmpeg — ещё одна причина обновиться, а не полагаться на обходные пути.
Закономерность, а не единичный случай
В июле 2026 года CVE-2026-66066 стала отдельной критической уязвимостью Active Storage, затронувшей приложения на libvips. Приложения на ImageMagick тот путь атаки не затрагивал, зато затрагивает этот. Две критические уязвимости за четыре месяца, через обе поддерживаемые библиотеки обработки изображений, говорят об одном: обработка изображений — это большая поверхность атаки, а Active Storage запускает её на файлах от посторонних людей в момент прикрепления.
Смена процессора сама по себе не решает проблему. Защищает другое — отношение к библиотеке обработки изображений как к части поверхности атаки: обновляйте её так же, как фреймворк, ограничивайте политикой и знайте, на каких хостах она работает. Политику ImageMagick особенно легко упустить из виду, ведь это серверная настройка, которая живёт в образе операционной системы, а не в коде приложения.
Если обновиться сразу невозможно
Rails также опубликовал коммиты с патчами для 8.1 и 8.0. Пока вы не можете развернуть исправленный релиз, пройдите по этому чек-листу:
- Добавьте минимальные правила из бюллетеня в системную политику ImageMagick на каждом хосте, обрабатывающем загрузки (например,
/etc/ImageMagick-7/policy.xml). - Убедитесь, что ни одно разрешающее правило или подстановочный знак в том же файле их не перекрывает, затем проверьте результат командой
magick -list policy. - Если вы рендерите PDF или PostScript через ImageMagick, снова разрешите делегат
gsи только нужные вам кодеры, понимая, что часть риска при этом сохраняется. - Ограничьте загрузки: временно сузьте круг тех, кто может прикреплять файлы, или приостановите анонимные загрузки.
- Если вы используете сервис Disk, запланируйте смену
secret_key_base, мастер-ключа и содержимогоconfig/credentials.yml.enc, учётных данных хранилища и базы данных, а также сторонних токенов. Не оставляйте скомпрометированный секрет в качестве резервного.
Минимальные правила, опубликованные в бюллетене:
<policy domain="coder" rights="none" pattern="MSL"/>
<policy domain="delegate" rights="none" pattern="gs"/>
<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,EPS2,EPS3,EPI,EPSF,EPSI,EPT,EPT2,EPT3,PDF,AI,EPDF,PDFA,POCKETMOD,XPS,PCL}"/>
Совет: Встройте политику в базовый образ сервера или контейнера, а не правьте хосты вручную, — тогда её получат и новые воркеры, и пересобранные контейнеры.
Подробности читайте в бюллетене безопасности Rails.
Чем может помочь LOGIQ
LOGIQ поддерживает команды, которые эксплуатируют open source-стеки на Linux, — от образа операционной системы до среды выполнения приложений. Если вам нужна помощь с проверкой политик ImageMagick на ваших серверах или с планированием ухода с ветки, поддержка которой заканчивается, свяжитесь с нашей командой.
Global
Japan
Korea
China
Taiwan
Vietnam
Thailand
Indonesia
Portugal
Spain
France
Germany
Egypt