Яндекс.Метрика
Услуги Портфолио Контакты БлогНовости +7 (800) 511‑32‑27 Обсудить проект
Безопасность

KindaRails2Shell: критическая уязвимость Ruby on Rails грозит утечкой секретов и RCE

31 июля 2026·6 мин чтения
Ruby on RailsCVE-2026-66066
KindaRails2Shell: критическая уязвимость Ruby on Rails грозит утечкой секретов и RCE

Коротко о главном

29 июля 2026 года команда Ethiack раскрыла CVE-2026-66066 (KindaRails2Shell) — критическую уязвимость Active Storage в Ruby on Rails с оценкой CVSS 9.5. Загрузив специально сформированное изображение, атакующий заставляет обработчик libvips прочитать произвольные файлы сервера, а через утёкший ключ SECRET_KEY_BASE — добиться удалённого выполнения кода. Исправление — обновление до Rails 7.2.3.2, 8.0.5.1 или 8.1.3.1.

Опасность в том, что уязвимы конфигурации по умолчанию: если приложение на Rails 7.0–8.1 принимает пользовательские изображения через Active Storage и обрабатывает их через vips, оно под ударом «из коробки», без экзотических настроек. Исследователи Ethiack оценили масштаб потенциально уязвимых сайтов в сотни тысяч.

Для команд, которые ведут веб-разработку на Rails, это повод сегодня же свериться с версией фреймворка и libvips, а не откладывать патч до планового спринта. Если нужен внешний взгляд на периметр, пригодится и регулярная проверка безопасности сайта.

Что именно нашли

Уязвимость живёт в варианте обработки изображений Active Storage — стандартном механизме Rails для загрузки файлов и генерации превью. По умолчанию Active Storage использует libvips (через гем ruby-vips), но не отключает операции libvips, помеченные как небезопасные для недоверенного контента. Из-за этого сформированное злоумышленником изображение при обработке достигает опасных путей и раскрывает файлы, доступные процессу Rails-приложения. Классификатор CWE — CWE-1188 (небезопасная инициализация ресурса по умолчанию).

Прямое следствие — чтение произвольных файлов: конфигурации, учётные данные Rails (credentials), пароли БД, ключи облачных хранилищ, сторонние токены. Но настоящая эскалация начинается дальше. Извлекая криптографический секрет SECRET_KEY_BASE из прочитанных файлов, атакующий может подделать подписанный Marshal-payload и добиться удалённого выполнения кода. Именно поэтому уязвимость и назвали KindaRails2Shell — «почти шелл» через цепочку из безобидной на вид загрузки картинки.

Кого затрагивает: версии и условия

Уязвимость касается широкого диапазона поддерживаемых веток Rails, но с важной оговоркой для старых версий.

Rails 7.0.0–7.2.3.1, 8.0.0–8.0.5 и 8.1.0–8.1.3 уязвимы в конфигурации по умолчанию — достаточно, чтобы Active Storage принимал недоверенные изображения и использовал процессор vips.

Rails 6.0.0–6.1.7.10 затронуты только при нестандартной настройке Active Storage — дефолтная конфигурация этих версий использовала другой обработчик.

Три условия эксплуатации совпадают у типичного продакшена: включён Active Storage, задействован процессор vips и приложение принимает загрузку изображений от пользователей. Это делает уязвимыми не «редкие кейсы», а массовый паттерн — формы аватаров, вложений, галерей.

Что это значит для команд разработки

Rails остаётся одним из самых распространённых фреймворков для бэкенда веб-продуктов, поэтому CVE-2026-66066 бьёт по большому числу боевых систем сразу. Опасна именно тривиальность вектора: загрузка картинки — обыденная функция, которую редко воспринимают как поверхность атаки, а здесь она превращается в чтение секретов и потенциальный контроль над сервером.

Особенность этой уязвимости — патча мало. Обновление Rails чинит логику Active Storage, но работает только в связке со свежим libvips: без обновления системной библиотеки исправление не вступает в силу. Это значит, что командам нужно проверить не только версию гема, но и версию нативной зависимости на всех окружениях — включая контейнерные образы и CI, где libvips часто «замораживается» вместе с базовым образом.

Отдельно стоит оценить, что уже могло утечь. Если приложение было доступно в интернете и принимало загрузки изображений, консервативный сценарий — считать, что чувствительные файлы могли быть прочитаны, и планировать ротацию критичных секретов (в первую очередь SECRET_KEY_BASE и ключей доступа к облаку) после закрытия уязвимости.

Как действовать: пошагово

Последовательность для команд, у которых есть Rails в проде:

1. Обновите Rails до исправленной версии своей ветки: 7.2.3.2, 8.0.5.1 или 8.1.3.1 (либо новее). Это первый и главный шаг.

2. Обновите libvips до версии 8.13 или новее — без этого патч Rails не заработает. Проверьте версию на всех средах, включая Docker-образы.

3. Если немедленный патч невозможен, примените стопгап: переменную окружения VIPS_BLOCK_UNTRUSTED=1, либо (для ruby-vips 2.2.1+) вызов Vips.block_untrusted(true) в инициализаторе приложения.

4. Проверьте журналы Active Storage и веб-сервера на подозрительные загрузки изображений в период до обновления и оцените, требуется ли ротация секретов.

5. Зафиксируйте проверку версий Rails и libvips в CI, чтобы регресс не вернул уязвимую связку при следующем деплое.

Часто задаваемые вопросы

Насколько это серьёзно? Оценка CVSS 9.5 (критическая). Вектор — от чтения произвольных файлов до удалённого выполнения кода через подделку подписанного Marshal-payload, а условия эксплуатации выполняются в конфигурации Rails по умолчанию.

Мне точно нужно что-то делать? Если ваш продукт на Rails 7.0–8.1 принимает пользовательские изображения через Active Storage с процессором vips — да, обновляйтесь немедленно. Версии 6.x затронуты только при нестандартной настройке.

Достаточно ли обновить только гем Rails? Нет. Патч работает лишь с libvips 8.13+. Нужно обновить и Rails, и нативную библиотеку на всех окружениях.

Что делать, если обновиться прямо сейчас нельзя? Задайте VIPS_BLOCK_UNTRUSTED=1 или вызовите Vips.block_untrusted(true) как временную меру, после чего как можно скорее переходите на исправленную версию.

Источники

Ethiack — KindaRails2Shell: Critical RCE in Rails via Active Storage (CVE-2026-66066), 29 июля 2026 года (первоисточник, команда-исследователь).

Rapid7 — KindaRails2Shell: CVE-2026-66066, Critical Arbitrary File Read and Possible Remote Code Execution in Ruby on Rails, 30 июля 2026 года.

HeroDevs — CVE-2026-66066: Rails Active Storage Arbitrary File Read and RCE, 2026.

Материал подготовлен редакцией YuSMP Group по открытым источникам. Нужна экспертиза по теме или разработка под задачу — обсудим проект.