
CVE-2020-28874
Dieses Repository enthält die Beschreibung der gefundenen Sicherheitslücke (CVE-2020-28874) in der Version r1270 von ProjectSend.
Vielen Dank an meine Kollegen von Entelgy Innotec Security, die mich dazu angespornt haben, besser zu werden!
Die Sicherheitslücke befindet sich in der Komponente zum Zurücksetzen des Passworts. Ein Angreifer kann das Passwort eines beliebigen bekannten Benutzers (z. B. admin) anhand seines Benutzernamens ändern, ohne dass ein gültiger Token erforderlich ist.
Dies ist möglich, weil das Backend die Variable $user_data nicht mit den Benutzerdaten bereinigt, die aus dem angegebenen Benutzernamen geladen wurden.
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);
....
}
Und den Zustand dieser Variable verwendet, um den Vorgang zum Zurücksetzen des Passworts fortzusetzen.
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'];
...
}
...
}
Dazu muss der Angreifer eine POST-Anfrage erstellen, mit einem ungültigen Parameter "token" und dem Parameter "user" mit dem Zielbenutzernamen in der Abfragezeichenfolge. Außerdem müssen im Body-Teil die Parameter “form_type” als “new_password”, “password” mit dem gewünschten neuen Passwort und csrf_token mit einem gültigen Token (vom Anmeldeformular, das Formular zum Zurücksetzen des Passworts stellt dies nicht bereit) hinzugefügt werden.
In diesem Repository finden Sie ein Python-Skript zur Ausnutzung der Sicherheitslücke und einen Docker-Container zum Testen.
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*
Aktualisieren Sie auf Version r1295 oder höher.