
CVE-2020-28874
यह रिपॉजिटरी ProjectSend r1270 रिलीज़ में पाई गई कमजोरी (CVE-2020-28874) का विवरण प्रस्तुत करती है।
Entelgy Innotec Security के मेरे सहयोगियों को धन्यवाद जिन्होंने मुझे सुधार करने के लिए प्रेरित किया!
यह कमजोरी पासवर्ड रीसेट घटक में है, एक हमलावर किसी भी ज्ञात उपयोगकर्ता का पासवर्ड उसके उपयोगकर्ता नाम से, जैसे admin, बिना वैध टोकन के बदल सकता है।
यह संभव है क्योंकि बैकएंड प्रदान किए गए उपयोगकर्ता नाम से लोड किए गए उपयोगकर्ता डेटा के साथ $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" पैरामीटर शामिल हो, साथ ही बॉडी भाग में "form_type" को "new_password", "password" को वांछित नया पासवर्ड, csrf_token को एक वैध (लॉगिन फॉर्म से, पासवर्ड रीसेट फॉर्म यह प्रदान नहीं करता) जोड़ना होगा।
इस रिपॉजिटरी में, आप कमजोरी का शोषण करने के लिए एक पायथन स्क्रिप्ट और इसका परीक्षण करने के लिए एक डॉकर कंटेनर पा सकते हैं।
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 या उससे ऊपर अपग्रेड करें।