
CVE-2020-28874
Este repositório contém a descrição da vulnerabilidade encontrada (CVE-2020-28874) no ProjectSend versão r1270.
Agradeço aos meus colegas da Entelgy Innotec Security por me incentivarem a melhorar!
A vulnerabilidade está no componente de redefinição de senha; um atacante pode alterar a senha de qualquer utilizador conhecido pelo seu nome de utilizador, como admin, sem um token válido.
Isto é possível porque o backend não limpa o $user_data com os dados do utilizador carregados a partir do nome de utilizador fornecido.
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);
....
}
E utiliza o estado dessa variável para continuar o processo de redefinição da senha.
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 tal, o atacante precisa de criar um pedido POST, com um parâmetro "token" inválido e o parâmetro "user" com o nome de utilizador alvo na query string; também precisa de adicionar o "form_type" como "new_password", a "password" com a nova senha desejada e o csrf_token com um válido (proveniente do formulário de login; o formulário de redefinição de senha não o fornece) no corpo do pedido.
Neste repositório, pode encontrar um script em python para explorar a vulnerabilidade e um contentor docker para a testar.
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
#Para concluir o processo de instalação do ProjectSend, vá a http://localhost no navegador e siga as instruções para configurar uma conta de administrador
cd ..
python CVE-2020-28874.py --url http://localhost --user admin --pwd newAdminP4ssword*
Atualize para a versão r1295 ou superior.