Неаутентифицированный RCE в плагине изменения размера изображений Cloudflare // Опубликовано 18 августа 2025 г. // CVE-2025-8723

КОМАНДА БЕЗОПАСНОСТИ WP-FIREWALL

Cloudflare Image Resizing Vulnerability

Имя плагина Изменение размера изображения Cloudflare
Тип уязвимости Удаленное выполнение кода
Номер CVE CVE-2025-8723
Срочность Высокий
Дата публикации CVE 2025-08-18
Исходный URL-адрес CVE-2025-8723

Срочная рекомендация по безопасности: изменение размера изображения Cloudflare (cf-image-resizing) <= 1.5.6 — неаутентифицированный RCE через rest_pre_dispatch (CVE-2025-8723)

Дата: 18 августа 2025 г.
Серьезность: Критический (CVSS 10.0) — Удаленное выполнение кода (RCE)
Затронутые плагины: Изменение размера изображения Cloudflare (ярлык плагина: cf-image-resizing)
Уязвимые версии: <= 1.5.6
Исправлено в: 1.5.7
CVE: CVE-2025-8723


Эти рекомендации написаны с точки зрения WP-Firewall — поставщика решений безопасности WordPress и управляемого WAF — и призваны помочь владельцам, администраторам и командам безопасности сайтов WordPress понять уязвимость, оценить степень риска и реализовать быстрые и практичные меры по её снижению (включая правила WAF и меры реагирования на инциденты). Они написаны в практичном и человечном ключе, сфокусированном на том, что вам необходимо сделать сейчас для защиты своего сайта и как восстановить его в случае взлома.

Примечание: Если вы используете плагин Cloudflare Image Resizing на каком-либо сайте WordPress, воспринимайте это как чрезвычайную ситуацию и следуйте разделу «Немедленные действия» ниже.


Управляющее резюме

Критическая уязвимость в плагине Cloudflare Image Resizing WordPress (версии <= 1.5.6) позволяет неаутентифицированным злоумышленникам осуществлять удаленное выполнение кода (RCE), злоупотребляя использованием плагином диспетчерского хука WordPress REST API (rest_pre_dispatch) без адекватной проверки подлинности. Уязвимости присвоен идентификатор CVE‑2025‑8723, и она исправлена в версии 1.5.7.

RCE в плагине WordPress — один из самых опасных классов уязвимостей: он позволяет выполнять произвольные команды на сервере, полностью захватывать сайт, использовать бэкдоры, осуществлять кражу данных, вносить данные в черный список за спам/вредоносное ПО и переходить на другие сайты в среде хостинга.

Если вы не можете немедленно обновиться до версии 1.5.7, внедрите виртуальные исправления (правила WAF) и контроль доступа для блокировки попыток эксплуатации. При подозрении на взлом следуйте контрольному списку реагирования на инциденты, приведённому ниже.


Что пошло не так (техническая информация)

  • Плагин регистрирует логику, которая выполняется через предварительный хук WordPress REST API. rest_pre_dispatch. Этот хук запускается на ранней стадии обработки REST-запроса и может использоваться для обхода обычной маршрутизации REST.
  • В уязвимых версиях логика, связанная с этим хуком, обрабатывала неаутентифицированный ввод и достигала путей кода, которые позволяли выполнить предоставленную злоумышленником полезную нагрузку или включить небезопасный контент, что фактически делало возможным RCE.
  • Основная причина — отсутствие проверки аутентификации/авторизации в сочетании с небезопасной обработкой управляемого пользователем ввода в пути кода, который достигает контекста выполнения на сервере.

Потому что rest_pre_dispatch вызывается до применения стандартной аутентификации REST, поэтому отсутствие проверки разрешения запроса приводит к неаутентифицированному доступу к привилегированным операциям. Эксплойт может быть активирован исключительно через HTTP-запрос к конечной точке(ам) REST API, к которой подключается плагин.


Влияние

  • Возможна полная компрометация сайта (RCE → бэкдор → создание учетной записи администратора → кража данных).
  • Доступ на уровне сервера, если процесс PHP имеет опасные разрешения или существуют уязвимости локального повышения привилегий.
  • Эксфильтрация данных (дампы баз данных), порча контента, распространение спама, майнинг криптовалюты, горизонтальное перемещение в средах многосайтового хостинга или включение в ботнеты.
  • Индексация и внесение в черные списки поисковыми системами и службами безопасности — серьезный удар по SEO и репутации.

Учитывая неаутентифицированный характер и высокую серьезность (CVSS 10), злоумышленники, скорее всего, будут автоматизировать попытки эксплуатации; требуются быстрые действия.


Немедленные действия (что делать прямо сейчас)

  1. Немедленно обновите плагин до версии 1.5.7 или более поздней. (рекомендуемое и самое простое решение).
    • Из панели администратора WP: Плагины → Установленные плагины → Обновить Cloudflare Image Resizing.
    • Или через WP-CLI:
      список плагинов wp --format=table
      обновление плагина wp cf-image-resizing
  2. Если вы не можете обновиться немедленно, примените виртуальные исправления / правила WAF (см. руководство WAF ниже). Заблокируйте любой неаутентифицированный доступ к конечным точкам REST плагина и любым подозрительным полезным нагрузкам.
  3. Если вы подозреваете эксплуатацию или не можете подтвердить статус исправления:
    • Переведите сайт в режим обслуживания (или временно заблокируйте весь внешний трафик).
    • Создайте полную резервную копию файлов и базы данных и сохраните журналы для судебно-медицинского анализа.
    • Выполните ротацию всех паролей/SSH-ключей администратора и хостинга WordPress.
    • Поиск индикаторов компрометации (IoC) — см. раздел «Обнаружение».
  4. Временно отключите плагин если невозможно применить своевременное обновление или надежный виртуальный патч:
    плагин wp деактивирует cf-image-resizing

    Имейте в виду, что это может повлиять на функциональность изображения, если вы используете Cloudflare Image Resizing.

  5. Включить или усилить мониторинг журналов доступа, журналов ошибок и оповещений брандмауэра веб-приложений.

WAF / руководство по виртуальному исправлению

Если немедленное исправление невозможно (например, из-за тестирования совместимости или планового обслуживания), используйте виртуальное исправление для блокировки попыток эксплуатации уязвимости. WP-Firewall рекомендует следующий многоуровневый подход:

  1. Блокировать запросы REST API, нацеленные на пространство имен плагина или конечные точки.
  2. Блокировать подозрительные шаблоны полезной нагрузки, обычно используемые для RCE (PHP в кодировке base64, оболочки PHP, «system(», «exec(», обратные кавычки, сериализованный PHP с неожиданными именами классов).
  3. Требовать аутентификацию для конфиденциальных путей REST с использованием ограничений на уровне сервера.

Ниже приведены примеры правил и фрагментов, которые вы можете добавить в WAF (или в nginx/Apache) в качестве временных мер. Они консервативны и предназначены для экстренных случаев — протестируйте их перед широким внедрением.

Примечание: замените вхождения /wp-json/ с фактическим пространством имен, которое использует плагин, если оно известно (слаг плагина и типичные шаблоны маршрутов являются полезными отправными точками: например, /wp-json/cf-image-resizing/).

Общее правило ModSecurity (пример)

Это правило ModSecurity блокирует запросы к конечным точкам REST, содержащие типичные символы RCE-кода или подозрительные параметры. Адаптируйте к своей среде и протестируйте.

SecRule REQUEST_URI "@beginsWith /wp-json/cf-image-resizing" "id:100001,phase:1,deny,log,status:403,msg:'Заблокирован подозрительный REST-запрос к cf-image-resizing',severity:2" SecRule REQUEST_URI "@beginsWith /wp-json" "chain,phase:1,deny,log,status:403,msg:'Блокировать неаутентифицированный POST-запрос к REST API с подозрительным телом'" SecRule REQUEST_METHOD "POST" SecRule REQUEST_HEADERS:Content-Type "application/json" "chain" SecRule ARGS_NAMES|REQUEST_BODY "(?:system\(|exec\(|passthru\(|popen\(|`.*`|base64_decode\(|php://input|gzinflate\()" "t:none,deny,log,status:403,msg:'Возможная полезная нагрузка RCE в запросе REST'"

Фрагмент кода Nginx — ограничение конечной точки REST плагина

Вы можете полностью запретить внешний доступ к REST-пути плагина или ограничить его аутентифицированными запросами или определенными IP-адресами.

Блокировать доступ к REST-пути плагина (просто и безопасно):

местоположение ~* ^/wp-json/cf-image-resizing/ { return 403; }

Если вам нужен выборочный доступ (разрешить Cloudflare или доверенные IP-адреса):

location ~* ^/wp-json/cf-image-resizing/ { allow 203.0.113.0/24; allow 198.51.100.17; # заменить на доверенные IP-адреса deny all; }

Apache (.htaccess) — запретить доступ к REST-пути плагина

Поместите в корень WordPress:

Требовать все отклоненные

Фильтр уровня WordPress (временный PHP)

В качестве экстренной меры для администраторов, которым удобно редактировать темы или mu-плагины, добавьте встроенный mu-плагин, который запрещает неавторизованный доступ к конечным точкам REST в пространстве имён плагина. Создайте файл wp-content/mu-plugins/block-cf-rest.php:

<?php
add_filter('rest_authentication_errors', function($result) {
    // If authentication already failed, return it.
    if ( ! empty($result) ) {
        return $result;
    }

    $request = rest_get_server()->get_request();
    $route = $request->get_route();

    if (strpos($route, '/cf-image-resizing/') === 0) {
        return new WP_Error('rest_forbidden', 'Access to this endpoint is temporarily disabled', array('status' => 403));
    }

    return $result;
}, 90);

Это блокирует неаутентифицированные REST-запросы к пространству имён плагинов. Удалите после обновления плагина и подтверждения его безопасности.


Обнаружение: индикаторы компрометации (IoC) и шаблоны журналов

Если уязвимость была использована, к общим признакам относятся:

  • Необычные запросы REST API к пространству имен плагинов:
    • Запросы к /wp-json/cf-image-resizing/* с подозрительных IP-адресов или со многих различных IP-адресов за короткий промежуток времени.
    • Запросы POST с телом JSON, содержащим закодированную или запутанную полезную нагрузку.
  • Новые или измененные файлы PHP в доступных для записи каталогах (uploads, wp-content/uploads, wp-includes, plugins):
    • Файлы с именами, напоминающими системные журналы, медиа-файлы, но содержащие PHP-код (например, изображение.php, большой палец.jpg.php, ._thumbs.php).
  • Созданы неавторизованные администраторы:
    • Найдите недавно созданных пользователей с правами администратора.
  • Неожиданные запланированные задачи (задания cron):
    • Новые записи cron, запускающие PHP-код.
  • Исходящие сетевые соединения с веб-сервера на подозрительные IP-адреса (командно-контрольные), особенно на портах, отличных от HTTP.
  • Команды оболочки, выполненные в журналах (например, пики wget, завиток или неожиданный вывод команды в журналах ошибок).
  • Подозрительные изменения в файлах .htaccess или index в каталогах плагинов/тем.
  • Расширенные журналы ошибок, показывающие eval(), include() с неожиданными путями.

Предлагаемые запросы журнала:

  • Журналы доступа Apache/Nginx (grep на предмет пути REST и подозрительных полезных данных):
    # найти обращения REST к пути плагина за последние 7 дней zgrep "/wp-json/cf-image-resizing" /var/log/nginx/access.log* | tail -n 200
        
  • Поиск строк base64 или оболочек php в теле запроса:
    zgrep -E "base64_decode|gzinflate|php://input|system\(|exec\(|passthru\(" /var/log/nginx/access.log*
        
  • Проверьте наличие измененных файлов в загрузках за последние 14 дней:
    найти wp-content/uploads -type f -mtime -14 -print
        
  • Список недавно измененных файлов на сайте:
    найти . -тип f -mtime -14 -не -путь "./.git/*" -печать
        
  • WP-CLI: список пользователей, созданных за последние X дней:
    список пользователей wp --role=administrator --fields=ID,user_registered,user_email,user_login --format=csv | awk -F, '$2 > "2025-08-01" {print}'
        
  • Поиск сигнатур PHP webshell (таких строк, как оценка(, утверждать(, base64_decode() в файлах сайта:
    grep -R --exclude-dir=vendor -nE "eval\(|assert\(|base64_decode\(" .
        

Контрольный список для судебной экспертизы (если вы подозреваете компрометацию)

  1. Сохраните доказательства:
    • Снимок диска сервера и резервная копия базы данных (защищенная от записи копия).
    • Сохраняйте полные журналы веб-сервера и журналы PHP-FPM/fastcgi.
  2. Изолируйте сайт (переведите его в автономный режим или заблокируйте трафик с ненадежных IP-адресов).
  3. Определите масштаб компромисса:
    • Какие файлы/пользователи были изменены; хронология изменений.
  4. Удалить бэкдоры и вредоносные файлы:
    • Вручную проверьте подозрительные файлы; удалите веб-оболочки и неизвестные файлы PHP.
  5. Повернуть учетные данные:
    • Измените пароли администратора WordPress, учетные данные базы данных, ключи SSH, токены API (включая Cloudflare/другие службы).
  6. Сканировать и очистить:
    • Используйте несколько инструментов сканирования и ручную проверку.
  7. При необходимости восстановите данные из заведомо исправной резервной копии.
  8. Наклейте пластырь, закрепите место и внимательно наблюдайте за появлением рецидивов.
  9. Если утечка касается конфиденциальных данных или данных клиентов, следуйте установленным законом и нормативным процедурам раскрытия информации.

Если у вас нет собственных специалистов по реагированию на инциденты, обратитесь к профессиональному специалисту по реагированию на инциденты. Время имеет решающее значение: злоумышленники стремятся как можно быстрее повторно заразить сайты.


Рекомендации по укреплению (после обновления)

Помимо обновления плагина, примените меры по защите вашего сайта WordPress, чтобы уменьшить поверхность атаки:

  • Регулярно обновляйте ядро WordPress, темы и плагины. Включите автоматическую установку небольших обновлений и продумайте контролируемые графики для крупных обновлений.
  • Ограничьте установку доверенных и активно поддерживаемых плагинов. Удалите неиспользуемые плагины и темы.
  • Ограничить разрешения файловой системы:
    • Файлы WordPress обычно должны принадлежать пользователю, который не может выполнять произвольные команды. Избегайте предоставления широких прав на запись пользователю веб-сервера.
  • Ограничить доступ к REST API:
    • Блокируйте доступ к конечным точкам REST, которые не должны быть общедоступными, используя фильтры или правила на стороне сервера.
  • Реализуйте политику минимальных привилегий для пользователей WordPress и никогда не используйте учетную запись администратора для выполнения рутинных операций.
  • Используйте управляемый WAF с виртуальным исправлением, чтобы блокировать попытки эксплуатации вновь обнаруженных уязвимостей.
  • Контролируйте журналы и оповещения — поддерживайте возможность обнаружения инцидентов.
  • Регулярно создавайте резервные копии кода и базы данных, а также тестируйте процедуры восстановления.

Как WP-Firewall смягчит и защитит ваш сайт WordPress

В WP-Firewall мы применяем многоуровневый подход для обеспечения безопасности сайтов:

  • Быстрое виртуальное исправление: при обнаружении подобной уязвимости мы развертываем целевые сигнатуры WAF, нацеленные на конкретные шаблоны атак и конечные точки REST, связанные с проблемой (превентивно блокируя попытки эксплуатации).
  • Правила, учитывающие контекст: наш WAF проверяет вызовы REST API и блокирует неаутентифицированные запросы, пытающиеся получить доступ к пространствам имен, специфичным для плагина, или отправляющие подозрительные полезные данные.
  • Управляемое сканирование и мониторинг: запланированное сканирование на предмет изменений файлов, наличия веб-оболочек и аномальной активности администратора.
  • Руководство по реагированию на инциденты: при подозрении на компрометацию мы обеспечиваем пошаговое устранение неполадок и помогаем внедрить правила сдерживания.
  • Управление автоматическими обновлениями: при необходимости включите автоматические обновления критически важных плагинов, чтобы гарантировать своевременное получение исправлений в вашей среде (вы управляете политикой и окнами тестирования).

Если вам нужна немедленная защита, виртуальное исправление уязвимого плагина — один из самых быстрых и наименее разрушительных способов снизить риск, пока вы планируете и тестируете официальное обновление плагина.


Правила поиска и мониторинга угроз, которые следует добавить сейчас

  • Оповещение о доступе к /wp-json конечные точки, содержащие подозрительные подстроки в теле:
    • base64_decode, eval, gzinflate, php://input,
  • Отметьте создание нового пользователя-администратора вне окон внесения изменений.
  • Сопоставьте всплески ответов 403/5xx на конечных точках REST — автоматическое сканирование часто показывает закономерность в виде множества быстрых запросов.
  • Следите за созданием файла в wp-контент/загрузки с .php расширение или файлы с двойным расширением (например, изображение.jpg.php).
  • Контролируйте исходящие соединения с веб-сервера на новые внешние IP-адреса и домены.

Пример правила SIEM (псевдо):
Если > 5 запросов POST к /wp-json/cf-image-resizing/ с того же IP в течение 60 секунд И тело запроса содержит base64_decode ИЛИ система(, отметить как возможный эксплойт и заблокировать IP.


Восстановление и действия после инцидента

  1. Выполните очистку или восстановление из чистой резервной копии, созданной до взлома.
  2. Замените все скомпрометированные учетные данные (БД, WordPress, панели управления хостингом, ключи API).
  3. Обновите плагин до версии 1.5.7 или более поздней.
  4. Жесткое сканирование всей среды (не только файлов сайта): контейнеров, хостовой ОС, заданий cron, бэкдоров базы данных.
  5. Если есть вероятность раскрытия закрытых ключей, перевыпустите SSL-сертификаты.
  6. Сообщите об инциденте своему хостинг-провайдеру и всем пострадавшим сторонам в соответствии с нормативными обязательствами.
  7. Внедрить или усилить мониторинг и меры защиты WAF для выявления попыток повторного заражения.

Пример: команды быстрого обнаружения и проверки

  • Проверьте версию плагина:
    статус плагина wp cf-image-resizing --field=version
        
  • Быстрая деактивация плагина:
    плагин wp деактивирует cf-image-resizing
        
  • Список файлов, измененных за последние 7 дней:
    найти . -тип f -mtime -7 -print
        
  • Проверьте наличие веб-оболочек в загрузках:
    grep -R --exclude-dir=папка-плагина -nE "
        
  • Список пользователей-администраторов:
    список пользователей wp --role=administrator --fields=ID,user_login,user_email,user_registered
        

Часто задаваемые вопросы (FAQ)

В: Я обновился до версии 1.5.7 — это безопасно?
A: Да — обновление до версии 1.5.7 устраняет уязвимость. Однако, если ваша уязвимость ранее была эксплуатирована, само по себе обновление не устранит бэкдоры и не отменит изменения, внесённые злоумышленником. Выполните проверки на наличие индикаторов компрометации (IoC) и выполните приведенный выше контрольный список для криминалистической экспертизы.

В: Что делать, если я не могу выполнить обновление (зависимость от пользовательского кода)?
A: Примените виртуальные исправления (правила WAF) и/или ограничьте доступ к конечным точкам REST плагина через конфигурацию на уровне сервера. Рассмотрите возможность временного отключения плагина, если функции изменения размера изображений не критичны, пока вы не сможете безопасно протестировать и обновить его.

В: Нарушат ли правила WAF законную функциональность образов Cloudflare?
A: Агрессивная блокировка может повлиять на легитимное использование при неправильном применении. Адаптируйте правила так, чтобы блокировать только неаутентифицированные вызовы к специфичным для плагина путям REST и полезным нагрузкам, указывающим на выполнение кода. По возможности, перед блокировкой тестируйте правила в режиме обнаружения.


Заголовок параграфа о регистрации бесплатного плана WP-Firewall
Начните защищать свой сайт за считанные минуты — WP‑Firewall Basic (бесплатно)

Если вы управляете сайтами на WordPress и вам нужен мгновенный уровень защиты, включающий управляемый брандмауэр, неограниченную пропускную способность, настроенный WAF, автоматическое сканирование на вредоносное ПО и устранение 10 самых опасных угроз по версии OWASP, WP-Firewall Basic (бесплатно) обеспечит вам необходимую защиту прямо сейчас. Оформите бесплатный тариф и получите доступ к быстрому виртуальному обновлению и непрерывному мониторингу, чтобы блокировать недавно обнаруженные уязвимости плагинов, такие как CVE-2025-8723, пока вы планируете и тестируете обновления. Узнайте больше и зарегистрируйтесь: https://my.wp-firewall.com/buy/wp-firewall-free-plan/


Заключительные заметки и рекомендуемый контрольный список (можно скопировать)

  • Немедленно обновите cf-image-resizing до версии 1.5.7 (или более поздней).
  • Если обновление невозможно, примените правила WAF для блокировки /wp-json/cf-image-resizing/ и подозрительных полезных данных.
  • Проверьте журналы на наличие обращений к REST API и подозрительных тел запросов.
  • Поиск вновь созданных пользователей-администраторов, измененных файлов и заданий cron.
  • Создавайте резервные копии и сохраняйте доказательства в случае подозрения о компрометации.
  • Меняйте учетные данные и укрепляйте свою среду.
  • Рассмотрите возможность включения управляемого WAF/виртуального исправления для проактивной защиты сайтов.

Если вам нужна помощь с внедрением любого из вышеперечисленных правил WAF, проведением экспертных проверок или настройкой непрерывной защиты нескольких сайтов, команда WP-Firewall может помочь с экстренным виртуальным исправлением и руководством по реагированию на инциденты. Оформите подписку на тариф «Базовый» (бесплатный), чтобы получить немедленную защиту и контроль над ситуацией во время устранения неполадок.https://my.wp-firewall.com/buy/wp-firewall-free-plan/)

Берегите себя — проверьте и установите исправление прямо сейчас.


wordpress security update banner

Получайте WP Security Weekly бесплатно 👋
Зарегистрируйтесь сейчас
!!

Подпишитесь, чтобы каждую неделю получать обновления безопасности WordPress на свой почтовый ящик.

Мы не спамим! Читайте наши политика конфиденциальности для получения более подробной информации.