CVE-2025-23209
Craft CMS Craft CMS
2025-02-20
Craft CMS contains a code injection vulnerability caused by improper validation of the database backup path, ultimately enabling remote code execution.
Технический анализ и план устранения
Суть уязвимости
CVE-2025-23209 представляет собой критическую уязвимость типа Code Injection (инъекция кода) в системе управления контентом Craft CMS. Проблема локализована в механизме создания резервных копий базы данных.
Из-за недостаточной фильтрации и валидации пути для сохранения бэкапа (database backup path), злоумышленник с доступом к административной панели может внедрить произвольные команды. Поскольку Craft CMS использует системные утилиты (например, mysqldump или pg_dump) через оболочку (shell) для выполнения операций с БД, манипуляция путем позволяет выйти за пределы контекста файловой системы и выполнить произвольный код на сервере (RCE) с правами пользователя, от которого запущен веб-сервер.
Как исправить
Основным и наиболее надежным способом устранения уязвимости является обновление Craft CMS до версий, в которых была внедрена строгая валидация путей и параметров командной строки.
- Перейдите в корневую директорию проекта:
cd /path/to/your/craft-project
- Запустите обновление через Composer до безопасной версии (минимум 4.13.0 или 5.5.0 в зависимости от используемой ветки):
composer update craftcms/cms
- Если вы используете Docker, пересоберите образ после обновления
composer.lock:
docker-compose build --no-cache
- Убедитесь, что в файле
composer.jsonуказаны версии, исключающие уязвимый диапазон (исправлено в 4.13.0+ и 5.5.0+).
Временные меры
Если немедленное обновление невозможно, примените следующие защитные меры для снижения риска эксплуатации:
-
Ограничение прав доступа: Проверьте список пользователей с правами администратора. Уязвимость требует доступа к настройкам системы. Удалите неиспользуемые учетные записи и внедрите принцип минимальных привилегий.
-
Запрет выполнения команд через PHP: Если ваш стек позволяет, ограничьте функции исполнения системных команд в
php.ini, однако это может нарушить штатную работу функции бэкапа:
disable_functions = exec,passthru,shell_exec,system,proc_open
-
Настройка WAF (Web Application Firewall): Настройте правила фильтрации входящих POST-запросов к эндпоинтам административной панели (обычно
/admin/*), блокируя попытки передачи спецсимволов (;,&,|,$(),`) в параметрах, связанных с путями бэкапа. -
Изоляция файловой системы: Запустите процесс PHP-FPM в изолированном окружении (chroot) или контейнере с ограниченным доступом к системным бинарным файлам, чтобы минимизировать ущерб в случае успешного внедрения кода.