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 до версий, в которых была внедрена строгая валидация путей и параметров командной строки.

  1. Перейдите в корневую директорию проекта:
cd /path/to/your/craft-project

  1. Запустите обновление через Composer до безопасной версии (минимум 4.13.0 или 5.5.0 в зависимости от используемой ветки):
composer update craftcms/cms

  1. Если вы используете Docker, пересоберите образ после обновления composer.lock:
docker-compose build --no-cache

  1. Убедитесь, что в файле composer.json указаны версии, исключающие уязвимый диапазон (исправлено в 4.13.0+ и 5.5.0+).

Временные меры

Если немедленное обновление невозможно, примените следующие защитные меры для снижения риска эксплуатации:

  1. Ограничение прав доступа: Проверьте список пользователей с правами администратора. Уязвимость требует доступа к настройкам системы. Удалите неиспользуемые учетные записи и внедрите принцип минимальных привилегий.

  2. Запрет выполнения команд через PHP: Если ваш стек позволяет, ограничьте функции исполнения системных команд в php.ini, однако это может нарушить штатную работу функции бэкапа:

disable_functions = exec,passthru,shell_exec,system,proc_open

  1. Настройка WAF (Web Application Firewall): Настройте правила фильтрации входящих POST-запросов к эндпоинтам административной панели (обычно /admin/*), блокируя попытки передачи спецсимволов (;, &, |, $(), `) в параметрах, связанных с путями бэкапа.

  2. Изоляция файловой системы: Запустите процесс PHP-FPM в изолированном окружении (chroot) или контейнере с ограниченным доступом к системным бинарным файлам, чтобы минимизировать ущерб в случае успешного внедрения кода.