Vulnerabilidad en la plataforma del sistema de gestión de contenidos (CMS) OctoberCMS (CVE-2021-32648)
ANÁLISIS
El código vulnerable existe en el archivo Auth/Models/User.php dentro de la biblioteca October Rain de OctoberCMS. El código que expone esta vulnerabilidad está dentro de una función llamada checkResetPasswordCode, específicamente, la línea 281 en User.php. La siguiente línea de código intenta validar la solicitud de restablecimiento de contraseña entrante comparando el código de restablecimiento enviado dentro de la solicitud HTTP con el código de restablecimiento generado por OctoberCMS durante un proceso de restablecimiento legítimo:
return ($this->reset_password_code == $resetCode);
Para explotar esta vulnerabilidad, el actor simplemente proporcionaría un valor booleano true como código de restablecimiento dentro de una solicitud HTTP personalizada para restablecer la contraseña de una cuenta. Al suministrar el booleano true, la comparación entre el booleano true y la cadena de código de restablecimiento da como resultado un booleano true, aunque las dos variables tengan tipos diferentes. Esto valida efectivamente la solicitud de restablecimiento de la contraseña del actor, lo que le permite cambiar la contraseña [2].
Versiones afectadas:
Desde (incluyendo) 1.0.471 hasta (excluyendo) 1.0.472
Desde (incluyendo) 1.1.1 hasta (excluyendo) 1.1.5
RECOMENDACIONES
El problema ha sido parcheado en la Build 472 y en la v1.1.5.
Los usuarios pueden actualizar a la v1.1.5 o cambiar la línea de código anterior para utilizar === en lugar de == al comparar los valores del código de restablecimiento proporcionado por el usuario a través de una petición HTTP POST. La diferencia entre === y == consiste en que === compara el valor y el tipo de valor de la variable, no sólo el valor, como ocurre cuando se utiliza ==.