Уязвимость в плагине Perfmatters для WordPress позволяла удалять критические файлы и захватывать сайты

WordPress

В мире управления контентом безопасность дополнительных модулей остаётся одним из наиболее уязвимых мест. Очередным подтверждением этого стала критическая уязвимость в популярном плагине для оптимизации WordPress - Perfmatters, который используют более 200 000 сайтов. Обнаруженная проблема позволяла злоумышленникам без каких-либо прав доступа удалять с сервера любые файлы, что в перспективе открывало путь к полному захвату веб-ресурса. Между тем, оперативная работа исследователя и ответственное взаимодействие вендора с командой Wordfence позволили оперативно выпустить исправление, минимизировав потенциальный ущерб для сообщества.

Уязвимость CVE-2026-4350

Суть уязвимости, получившей идентификатор CVE-2026-4350, заключалась в реализации функции удаления фрагментов кода (snippets) в плагине. В версиях Perfmatters до 2.5.9.1 включительно, метод "action_handler()" в классе PMCS некорректно обрабатывал параметр "$_GET['delete']". Код не выполнял проверку прав доступа (capability check), не верифицировал одноразовый токен безопасности (nonce) и, что наиболее важно, не проводил санитизацию (очистку) имени передаваемого файла. В результате, неавторизованный пользователь мог инициировать процесс удаления, передав через GET-запрос произвольное имя файла.

Технический анализ показывает, что проблема усугублялась в методе "delete()". Переданное имя файла без какой-либо проверки конкатенировалось с путём к директории хранения фрагментов и передавалось функции "unlink()", которая и выполняла удаление. Отсутствие проверки на попытку выхода за пределы целевой директории (path traversal) позволяло злоумышленнику использовать последовательности вроде "../" для указания пути к любым файлам на сервере. Наиболее опасной целью в этой ситуации становился файл "wp-config.php" - основной конфигурационный файл WordPress, содержащий критически важные данные, включая ключи к базе данных.

Удаление "wp-config.php" приводит к тому, что система WordPress переходит в состояние первоначальной установки. Этим может воспользоваться злоумышленник, повторно запустив процесс настройки сайта и подключив его к контролируемой им базе данных, что фактически означает полный захват ресурса. Таким образом, уязвимость произвольного удаления файлов (Arbitrary File Deletion) эскалировалась до возможности удалённого выполнения кода (RCE) и компрометации всего сайта. Специалисты по кибербезопасности часто подчёркивают, что подобные недостатки в проверке прав доступа и санитизации входных данных являются одними из самых распространённых и опасных в веб-приложениях.

Ответственный процесс раскрытия информации (responsible disclosure) стал ключевым фактором в сдерживании угрозы. Исследователь под псевдонимом hoshino обнаружил проблему и 1 марта 2026 года сообщил о ней через программу вознаграждений за ошибки (Bug Bounty Program) компании Wordfence, получив за это вознаграждение в размере 3726 долларов. Команда Wordfence подтвердила уязвимость, разработала proof-of-concept (доказательство концепции) и 17 марта связалась с разработчиком плагина - компанией forgemedia LLC. Вендор оперативно отреагировал, зарегистрировавшись в портале для управления уязвимостями в тот же день, а уже 25 марта выпустил исправленную версию плагина 2.6.0.

Исправление было комплексным. Во-первых, в функцию "action_handler()" были добавлены проверка прав доступа ("current_user_can('manage_options')") и верификация одноразового токена безопасности ("verify_action_nonce"). Это ограничило доступ к опасному функционалу только администраторами с корректными запросами. Во-вторых, была реализована новая вспомогательная функция "normalize_snippet_file_name()", которая выполняет строгую санитизацию имени файла. Она использует встроенные функции WordPress "sanitize_file_name()" и "basename()", а также проверяет, что имя файла заканчивается на ".php" и не является служебным файлом "index.php". Это эффективно блокирует любые попытки использования path traversal, ограничивая операции файлами строго внутри предназначенной для фрагментов поддиректории.

Важно отметить, что пользователи плагина безопасности Wordfence, включая бесплатную версию, были защищены от потенциальных атак ещё до выхода патча благодаря встроенному в брандмауэр механизму защиты от локального включения файлов (Local File Inclusion protection). Однако эта мера является вторичной линией обороны. Основной и самой эффективной рекомендацией для всех владельцев сайтов на WordPress является немедленное обновление плагина Perfmatters до версии 2.6.0 или выше. Данный инцидент в очередной раз демонстрирует критическую важность своевременного обновления всех компонентов веб-приложения, особенно тех, которые имеют широкое распространение и затрагивают функции безопасности. Кроме того, история успешного взаимодействия исследователя, координатора уязвимостей и вендора служит моделью ответственного раскрытия информации, которая в конечном итоге способствует укреплению безопасности всей экосистемы.

Ссылки

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