В Ruby on Rails Active Storage обнаружена критическая уязвимость CVE-2026-66066. Она позволяет неаутентифицированному атакующему читать произвольные файлы на сервере и, при определённых условиях, выполнять удалённый код.
Суть проблемы
Уязвимость затрагивает приложения, использующие библиотеку libvips для обработки вариантов изображений (image variants) и принимающие загрузку файлов от недоверенных пользователей. В зоне риска — секреты вроде secret_key_base, учётные данные облачных сервисов и пароли к базам данных.
В стандартной конфигурации Rails с отображением вариантов изображений атакующий может загрузить специально сформированный файл и при генерации варианта спровоцировать некорректную обработку в libvips. Библиотека обрабатывает форматы через загрузчики (loaders) и сохранщики (savers), основанные на сторонних библиотеках. Некоторые из этих операций помечены как «unfuzzed», то есть небезопасные для недоверенного контента. Active Storage не отключал эти операции, поэтому вредоносная загрузка может активировать одну из них.
Исследователи продемонстрировали цепочку, раскрывающую содержимое произвольных файлов, доступных процессу приложения. Обычно в эту область входит окружение процесса, где хранятся secret_key_base и учётные данные внешних систем, что открывает путь к выполнению удалённого кода или латеральному перемещению в связанные сервисы.
Какие версии уязвимы
Приложение подвержено риску, если оно использует libvips для обработки изображений Active Storage (настройка config.active_storage.variant_processor = :vips, значение по умолчанию с Rails 7.0) и разрешает загрузку изображений от недоверенных пользователей.
Уязвимые версии пакета activestorage: - ниже 7.2.3.2 - 8.0.x ниже 8.0.5.1 - 8.1.x ниже 8.1.3.1
Минимальная поддерживаемая версия libvips для безопасной конфигурации — 8.13 или новее. Более старые сборки libvips не могут отключить unfuzzed-операции, и Active Storage будет вызывать исключение при загрузке в такой незащищаемой среде.
Что делать
Администраторам необходимо обновить activestorage до исправленной версии и убедиться, что libvips имеет версию не ниже 8.13. Установка патча предотвращает дальнейшую эксплуатацию, но не отменяет уже возможную кражу секретов.
Каждый секрет, доступный для чтения процессу приложения, следует считать потенциально скомпрометированным и ротировать. В список входят:
- secret_key_base и мастер-ключ из config/master.key или RAILS_MASTER_KEY
- всё, что расшифровывается из config/credentials.yml.enc
- ключи Active Storage для S3, GCS или Azure
- учётные данные базы данных
- токены для сторонних API
Смена secret_key_base аннулирует активные сессии и вынуждает пользователей входить заново; затрагиваются также зашифрованные cookie, подписанные cookie, подписанные глобальные ID и URL Active Storage. Ротацию стоит проводить в период наименьшей активности.
Источник: cybersecuritynews.com