the_open_door
café
ESEN
← Volver al índice

Moodle calculated-question RCE (CVE-2018-1133)

CVE-2018-1133 es una vulnerabilidad de Moodle anterior a la versión 3.5.0 que permite a un usuario con rol de profesor ejecutar código PHP arbitrario en el servidor. El fallo vive en el componente de cuestionarios (Quiz), concretamente en las preguntas de tipo "calculated" (calculadas), donde el profesor introduce fórmulas matemáticas que Moodle evalúa con la función eval() de PHP.

Moodle intenta sanear esas fórmulas con un validador, pero el filtro se puede burlar. Las fórmulas admiten marcadores (placeholders) tipo {x} que se sustituyen por valores; anidándolos y combinándolos con comentarios PHP se cuela código que el validador no detecta pero que sí llega a eval(). Un payload típico:

/*{a*/`$_GET[0]`;//{x}}

El bloque /*{a*/ abre un comentario que confunde al validador, las comillas invertidas ( `...` ) ejecutan el contenido como comando del sistema, y $_GET[0] permite pasar el comando por la URL. Al previsualizar la pregunta, eval() procesa la fórmula y ejecuta el código, lo que da ejecución remota: normalmente una reverse shell como el usuario del servidor web (www-data).

searchsploit -m 46551
php 46551.php    # ajustar URL, credenciales de profesor y el course id

Requisitos prácticos. Hace falta una cuenta con rol de profesor y un curso donde crear el cuestionario; el exploit automatizado (46551.php) necesita además el course ID, visible en el perfil del profesor o en la URL del curso. Conseguir esas credenciales es la fase previa (en Teacher, una fuga parcial de contraseña más fuerza bruta de un carácter).

Cómo detectarlo. El rastro está en la propia base de datos de Moodle: una pregunta calculada cuya fórmula contiene comentarios PHP, comillas invertidas o $_GET/exec/system (/*{a*/ es la firma del bypass), algo que ninguna fórmula matemática legítima lleva. En el log de acceso, la previsualización de la pregunta (question/preview.php o el editor del quiz) seguida de peticiones con un parámetro 0=<comando> es el disparo. La confirmación en el host es el proceso web (www-data) lanzando sh/bash como hijo tras esa previsualización (auditd/Sysmon for Linux).

Defensa. Actualizar Moodle a 3.5.0 o superior (donde el cálculo de fórmulas ya no usa eval() de forma insegura), limitar el rol de profesor a quien lo necesite, y monitorizar la creación de preguntas con contenido sospechoso. Tras el RCE suele venir la búsqueda de credenciales en config.php y el crackeo de hashes de la base de datos.

Herramientasmoodlescan

Máquinas donde se aplica