В Metasploit Framework предложен модуль эксплуатации уязвимости Ruby on Rails Active Storage

Metasploit

В фреймворке для тестирования на проникновение Metasploit (инструменте, который используют специалисты по безопасности для поиска и эксплуатации уязвимостей) предложен новый модуль. Он нацелен на критическую проблему в компоненте Ruby on Rails Active Storage. Уязвимость, известная как CVE-2026-66066, позволяет атакующему получить несанкционированный доступ к файлам приложения. Для этого достаточно отправить специально сформированный запрос на обработку изображения. Впоследствии это может привести к выполнению произвольного кода. Модуль пока находится на стадии рассмотрения и не включен в основную ветку фреймворка, поэтому публично недоступен для большинства пользователей.

Детали

Проблема также фигурирует под идентификатором GHSA-xr9x-r78c-5hrm. Она затрагивает Rails-приложения, которые используют Active Storage вместе с процессором обработки изображений Vips. Напомним, Active Storage - встроенный в Rails механизм для прикрепления файлов к моделям, например аватарок или документов. Vips - это библиотека для высокопроизводительной обработки изображений, часто применяемая в продакшене. Причина ошибки кроется в непроверяемом загрузчике данных при взаимодействии Active Storage и libvips. В результате атакующий может манипулировать запросами на обработку изображений и подписанными данными вариаций. Это позволяет перейти от раскрытия файлов к выполнению команд.

Механизм атаки можно описать следующим образом. Злоумышленник отправляет на сервер специально подготовленное изображение. Внутри находится ссылка на файл, который приложение не должно раскрывать. При обработке изображения библиотека Vips читает указанный файл. Его содержимое попадает в ответ вместо самого изображения. Так атакующий получает доступ к внутренним данным Rails, в том числе к секретному ключу, используемому для подписи вариаций изображений. Дальше этот ключ применяется для создания поддельной подписи, которая запускает произвольную команду на сервере. Описанный сценарий подтвержден исследователями и теперь воспроизводится автоматизированно.

Предложенный модуль, основанный на исследовании специалистов по безопасности, автоматизирует эту цепочку. Он принимает либо действительный подписанный ключ вариации изображения, либо полный URL представления ресурса. С их помощью модуль восстанавливает содержимое файлов, доступных приложению. Восстановлению подлежат и секретные материалы, используемые Rails для подписи данных. В частности, для этого могут использоваться окружение Rails-процесса, локальные конфигурационные файлы, зашифрованные учетные данные и устаревшие файлы секретов. Затем модуль формирует вредоносную подписанную вариацию. Она запускает команды через штатные примитивы обработки изображений. Такой подход избавляет оператора от необходимости вручную выполнять промежуточные шаги.

Модуль рассчитан на широкий круг конфигураций. Поддерживаются алгоритмы генерации ключей SHA-1, SHA-256, SHA-384 и SHA-512, а также форматы сериализации JSON, Marshal и MessagePack. Благодаря этому он совместим с разными версиями Rails и настройками развертывания. Кроме того, учтены как современные маршруты представления с перенаправлением, так и устаревшие маршруты Rails 6. Модуль поддерживает несколько типов полезной нагрузки. Среди них команды для Unix-систем, загрузка исполняемого кода через HTTP и выполнение в среде Ruby. Пользователь может выбрать подходящий вариант в зависимости от целевой платформы.

Автор проверил модуль в контролируемых лабораторных условиях на Rails 6.0.6.1, 6.1.7.10 и 8.0.5. Все стенды включали Active Storage, библиотеку обработки изображений Vips и libvips, собранную с поддержкой расширенных форматов. В ходе тестов удалось получить доступ к командной оболочке под учетной записью Rails-процесса. Встроенный режим проверки позволяет убедиться, что целевой сервер уязвим, до выполнения основной эксплуатации. При этом на обновленной версии Rails 8.0.5.1, содержащей исправление, ранее задокументированное поведение не воспроизвелось. Речь идет о чтении произвольных файлов. Это подтверждает, что патч устраняет проблему.

В заявке на включение кода, представленной автором, содержится 11 измененных файлов и более 3100 строк добавлений. В их число входят сам модуль, документация, тестовая спецификация и вспомогательные данные. Статический анализ кода, проверка документации, проверка стиля кода и набор из 56 тестов завершились без ошибок. Автор также рассказал, что использовал инструменты на основе искусственного интеллекта для генерации кода и документации. При этом все заявленные сценарии он вручную проверил в лаборатории.

Уязвимость актуальна для Active Storage до версии 7.2.3.2. Также она затрагивает уязвимые диапазоны Rails 8.0 и 8.1. Условие - использование процессора Vips. Организациям, работающим на Ruby on Rails, важно немедленно определить, настроен ли Active Storage на Vips. Следует также ознакомиться с рекомендациями производителя и бюллетенем безопасности.

Наличие готового модуля в Metasploit существенно упрощает проверку систем на подверженность этой проблеме. Специалисты по безопасности смогут быстрее выявлять уязвимые Rails-приложения и проверять эффективность обновлений. В то же время тот же инструмент могут использовать и злоумышленники, поэтому организациям не стоит откладывать исправление.

Администраторам необходимо установить все обновления, выпущенные для Rails. Если есть подозрение, что секретный ключ мог быть раскрыт, требуется перевыпустить его. Дополнительно рекомендуется следить за необычными запросами к точкам обработки изображений и представлений, а также за непредвиденной активностью Rails-воркеров. В качестве временной меры можно рассмотреть отключение процессора Vips, если архитектура приложения это допускает.

После включения модуля в основной состав Metasploit эксплуатация уязвимости станет доступна более широкому кругу злоумышленников. Инструмент автоматизирует все этапы атаки, что снижает порог входа. Поэтому обновление уязвимых систем должно стать первоочередной задачей для администраторов Rails-приложений.

Ссылки

Комментарии: 0