
CVE-2025-10377
Tipo de vulnerabilidad: Cross-Site Request Forgery (CSRF)
Función afectada: sd_toggle_logs()
CVSS v3.1: 4.3 (Media)
Vector: AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:L/A:N
(Nota: La puntuación refleja un cambio de estado no autorizado que requiere una víctima administradora e interacción del usuario.)
Descripción de la vulnerabilidad:
La función sd_toggle_logs() procesa operaciones sensibles como habilitar/deshabilitar los registros de acceso a páginas, los registros de errores y los registros de entrega de correo electrónico. Sin embargo, depende únicamente del parámetro $_REQUEST['log_type'] y de una comprobación de capacidad (current_user_can( 'manage_options' )) sin implementar protección CSRF (p. ej., check_admin_referer() o un nonce).
Como resultado, un atacante puede engañar a un Administrador con sesión iniciada para que visite una página maliciosa que envía silenciosamente una solicitud manipulada, provocando cambios no deseados de habilitación/deshabilitación en el registro del sitio.
Cambios de estado no autorizados en las funciones de registro del sitio (Registro de acceso a páginas, Registro de errores, Registro de entrega de correo electrónico).
Si el registro de errores está habilitado, el sitio puede comenzar a escribir errores de aplicación en una ruta de archivo determinada por el plugin (aumentando la probabilidad de divulgación de información operativa a través de los registros), pero el impacto directo de este problema es el cambio de estado en sí.
Cuando un Usuario con manage_options con sesión iniciada visita la página del atacante, la función de registro correspondiente se alterna sin consentimiento explícito.
<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>
Implementar nonces de WordPress (check_admin_referer() o wp_verify_nonce()) para validar las solicitudes.
Restringir las acciones sensibles solo a solicitudes POST.
Evitar depender únicamente de las comprobaciones de capacidad como protección contra CSRF.
Si no puede reproducir el problema exactamente como se describe en el informe, consulte la siguiente demostración en video (PoC) para ver un escenario de reproducción claro: