
CVE-2020-28874
Este repositorio contiene la descripción de la vulnerabilidad encontrada (CVE-2020-28874) en ProjectSend versión r1270.
Gracias a mis colegas de Entelgy Innotec Security por impulsarme a mejorar!
La vulnerabilidad se encuentra en el componente de restablecimiento de contraseña; un atacante puede cambiar la contraseña de cualquier usuario conocido mediante su nombre de usuario, como admin, sin un token válido.
Esto es posible porque el backend no limpia $user_data con los datos del usuario cargados a partir del nombre de usuario proporcionado.
if (!empty($_GET['token']) && !empty($_GET['user'])) {
$got_token = $_GET['token'];
$got_user = $_GET['user'];
/**
* Get the user's id
*/
$user_data = get_user_by_username($got_user);
....
}
Y utiliza el estado de esa variable para continuar el proceso de restablecimiento de la contraseña.
if ($_POST) {
/**
* Clean the posted form values.
*/
$form_type = encode_html($_POST['form_type']);
switch ($form_type) {
----
case 'new_password':
if (!empty($user_data['id'])) {
$reset_password_new = $_POST['password'];
...
}
...
}
Para ello, el atacante necesita crear una solicitud POST, con un parámetro "token" no válido y el parámetro "user" con el nombre de usuario objetivo en la cadena de consulta; también debe añadir en el cuerpo de la solicitud el “form_type” como “new_password”, “password” con la nueva contraseña deseada, y el csrf_token con uno válido (del formulario de inicio de sesión, el formulario de restablecimiento de contraseña no lo proporciona).
En este repositorio puedes encontrar un script de Python para explotar la vulnerabilidad y un contenedor Docker para probarla.
git clone https://github.com/varandinawer/CVE-2020-28874_CVE-2020-28875.git
cd ./CVE-2020-28874_CVE-2020-28875/docker-r1270
docker-compose up
#To finish the process of ProjectSend installation, go to http://localhost in the browser and follow the indication to setup an admin account
cd ..
python CVE-2020-28874.py --url http://localhost --user admin --pwd newAdminP4ssword*
Actualice a la versión r1295 o superior.