
CVE-2020-28874
يحتوي هذا المستودع على وصف الثغرة الأمنية المكتشفة (CVE-2020-28874) في إصدار ProjectSend r1270.
شكرًا لزملائي في Entelgy Innotec Security على دفعي للتحسين!
تقع الثغرة في مكوّن إعادة تعيين كلمة المرور؛ حيث يمكن للمهاجم تغيير كلمة مرور أي مستخدم معروف عبر اسم المستخدم الخاص به، مثل admin، دون الحاجة إلى رمز (token) صالح.
هذا ممكن لأن الواجهة الخلفية (backend) لا تُنظّف المتغير $user_data ببيانات المستخدم المحمّلة من اسم المستخدم المقدَّم.
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);
....
}
وتستخدم حالة ذلك المتغير لمواصلة عملية إعادة تعيين كلمة المرور.
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'];
...
}
...
}
للقيام بذلك، يحتاج المهاجم إلى إنشاء طلب POST، مع معامل "token" غير صالح ومعامل "user" يحمل اسم المستخدم المستهدف في سلسلة الاستعلام (query string)، كما يجب إضافة “form_type” بقيمة “new_password”، و“password” بكلمة المرور الجديدة المطلوبة، وcsrf_token برمز صالح (من نموذج تسجيل الدخول، إذ لا يوفر نموذج إعادة تعيين كلمة المرور ذلك) في جزء النص (body).
في هذا المستودع، يمكنك العثور على سكربت بايثون لاستغلال الثغرة وحاوية docker لاختبارها.
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*
قم بالترقية إلى الإصدار r1295 أو أحدث.