
CVE-2020-28328 पर SuiteCRM लॉग फ़ाइल रिमोट कोड निष्पादन और कुछ अतिरिक्त क्रॉस-साइट स्क्रिप्टिंग का विवरण
मैंने हाल ही में SuiteCRM में दो कमजोरियाँ खोजी हैं जो एक निम्न-विशेषाधिकार वाले उपयोगकर्ता को अंतर्निहित ऑपरेटिंग सिस्टम पर कोड निष्पादन प्राप्त करने के लिए एक आक्रमण श्रृंखला प्रदान करती हैं। आक्रमण श्रृंखला क्रॉस-साइट स्क्रिप्टिंग है, जिसका उपयोग क्रॉस-साइट रिक्वेस्ट फोर्जरी करने के लिए किया जा सकता है, जो एप्लिकेशन कॉन्फ़िगरेशन के साथ छेड़छाड़ करके और लॉग फ़ाइल को विषाक्त करके रिमोट कोड निष्पादन की ओर ले जाता है। यह सब एक फ़ाइल अपलोड के माध्यम से प्राप्त किया जाता है जिसमें दुर्भावनापूर्ण जावास्क्रिप्ट होता है जिसे एक निम्न-विशेषाधिकार वाला उपयोगकर्ता प्रशासनिक विशेषाधिकारों वाले उपयोगकर्ता को चलाने के लिए धोखा दे सकता है। मेरे द्वारा संलग्न प्रूफ-ऑफ-कॉन्सेप्ट फ़ाइलें और वीडियो एक निम्न-विशेषाधिकार वाले उपयोगकर्ता को यह आक्रमण करते हुए और SuiteCRM होस्ट करने वाले सिस्टम पर एक रिवर्स शेल प्राप्त करते हुए दर्शाता है।
यह SuiteCRM के संस्करण 7.11.17 में पैच किया गया था।
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
मैं इस रेटिंग से पूरी तरह सहमत नहीं हूँ क्योंकि एक्सप्लॉइट के लिए प्रशासनिक पहुँच की आवश्यकता होती है, जो PR:L को PR:H में बदल देगा, अंतिम स्कोर को 8.8 से 7.2 तक समायोजित करेगा।
मैं इसे इस प्रकार रेट करूँगा: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
संदर्भ:
SuiteCRM संस्करण 7.11.15
संग्रहीत क्रॉस-साइट स्क्रिप्टिंग 'Create Documents' फ़ाइल अपलोड में मौजूद है। एक निम्न-विशेषाधिकार वाला उपयोगकर्ता किसी भी सामग्री वाली फ़ाइल अपलोड करने में सक्षम है। उपयोगकर्ता तब इस दस्तावेज़ को डाउनलोड करने के लिए प्रदान किए गए लिंक की जांच कर सकता है और id पैरामीटर का पता लगाकर फ़ाइल सिस्टम पर फ़ाइल के स्थान का पता लगा सकता है। यह लंबा, यादृच्छिक मान /uploads/ निर्देशिका के अंदर फ़ाइल का नाम है। उपयोगकर्ता इस फ़ाइल में मनमाना जावास्क्रिप्ट रख सकता है और फिर लिंक किसी अन्य उपयोगकर्ता को भेज सकता है। इसका उपयोग किसी अन्य उपयोगकर्ता के सत्र को हाईजैक करने और/या उस उपयोगकर्ता की ओर से कार्य करने के लिए किया जा सकता है, जैसा कि PoC वीडियो में दिखाया जाएगा।
यह पता लगाने के बाद कि मैं क्रॉस-साइट स्क्रिप्टिंग के माध्यम से सत्र हाईजैकिंग द्वारा एडमिन बन सकता हूँ, मैंने तब पाया कि मैं 'Admin → System Settings' के तहत सिस्टम गुणों को नियंत्रित कर सकता हूँ, विशेष रूप से लॉग फ़ाइल गुण। लॉग फ़ाइल एक्सटेंशन काफी हद तक ब्लॉक किए गए थे, लेकिन मैं BurpSuite का उपयोग करके 'Log File Name' मान को किसी भी मनमाने मान में अपडेट करने में सक्षम था, जिसमें .php एक्सटेंशन शामिल हैं। मैंने ऐसा बिना कुछ बदले एक अनुरोध सबमिट करके और उस POST अनुरोध को कैप्चर करके किया जो वास्तव में मानों को अपडेट करता है। मैंने logger_file_name पैरामीटर के माध्यम से फ़ाइल नाम को shell.php में बदल दिया और बस 'Extension' फ़ील्ड को खाली कर दिया। इससे एक php फ़ाइल प्राप्त हुई जिसे मैं वेबरूट पर ब्राउज़र में एक्सेस कर सकता था, लेकिन मुझे फ़ाइल के अंदर निष्पादित करने के लिए कुछ php कोड की आवश्यकता थी।
इसके बाद, मैंने फ़ाइल में आउटपुट की जाँच की और देखा कि यदि मैं लॉगिंग को info पर सेट करता हूँ (जो मुझे लगता है कि डिफ़ॉल्ट था...), तो मैं उपयोगकर्ता गुणों (जैसे उपयोगकर्ता का प्रथम या अंतिम नाम) के माध्यम से फ़ाइल में इनपुट को नियंत्रित कर सकता हूँ, यदि मैं किसी उपयोगकर्ता को अपडेट करता हूँ। इसलिए, मैंने burp में एक अनुरोध कैप्चर किया और last_name फ़ॉर्म फ़ील्ड में कुछ php कोड <?php $id =`id`; echo $id; ?> डाला। इसके परिणामस्वरूप वेब सर्वर उपयोगकर्ता www-data के संदर्भ में Linux पर id कमांड का आउटपुट प्राप्त हुआ। लॉग फ़ाइल के आधार पर मैं बता सकता हूँ कि केवल एकल उद्धरण, दोहरे उद्धरण और बैक स्लैश को एस्केप किया गया था। आप बैकएंड पर sql लॉग फ़ाइल को tail करके इसकी पुष्टि कर सकते हैं।
मैं यह सब एडमिन उपयोगकर्ता के रूप में करने में सक्षम था क्योंकि मैं सत्र कुकीज़ प्राप्त करने में सक्षम था, हालांकि एक कार्यशील श्रृंखला के लिए, मुझे एडमिन उपयोगकर्ता के संदर्भ में जावास्क्रिप्ट के माध्यम से इसे निष्पादित करने की आवश्यकता थी। मैं इनमें से प्रत्येक POST अनुरोध को करने के लिए कुछ fetch अनुरोधों का उपयोग करके इसे स्क्रिप्ट करने में सक्षम था। पहले ने सिस्टम गुणों को अपडेट किया, दूसरे ने एडमिन उपयोगकर्ता के 'Last Name' फ़ील्ड को अपडेट किया, और अंतिम ने नव निर्मित लॉग फ़ाइल पर दुर्भावनापूर्ण php कोड के साथ एक GET अनुरोध किया। दुर्भावनापूर्ण php कोड मेरी मशीन के विरुद्ध एक curl अनुरोध करेगा, एक bash रिवर्स शेल डाउनलोड करेगा, और फिर उस curl अनुरोध के आउटपुट को सीधे bash में पाइप करेगा, कोड को निष्पादित करेगा। फिर मैंने इसे उसी विधि का उपयोग करके अपलोड किया जिस पर मैंने XSS अनुभाग में चर्चा की थी और एडमिन उपयोगकर्ता के रूप में नए लिंक पर पुनः विज़िट किया। मेरी bash फ़ाइल होस्ट करने वाले एक वेब सर्वर और चल रहे एक netcat लिसनर के साथ, मैं एक रिवर्स शेल प्राप्त करने में सक्षम था।
सुनिश्चित करें कि आपके पास Apache में AllowOveride All सेट है। nginx में यह सेटिंग नहीं है और मैंने इसका nginx पर परीक्षण नहीं किया।
SuiteCRM के नवीनतम रिलीज़, या कम से कम संस्करण 7.11.17 में अपडेट करें।
यह विशिष्ट फिक्स है। कमिट 1618af16eaa494c4551bac961e5ac8fc3d87ab8c
SuiteCRM रिपोर्टिंग प्रक्रिया के दौरान बहुत उत्तरदायी था। उन्होंने RCE को स्वीकार किया, जिसे पैच किया गया था। XSS एक वेब सर्वर कॉन्फ़िगरेशन का परिणाम था इसलिए उन्होंने इसे एक कमजोरी के रूप में स्वीकार नहीं किया। हालांकि, उन्होंने नोट किया कि वे इसके आलोक में दस्तावेज़ीकरण को अपडेट करेंगे।
06 AUG 2020 -> दोनों मुद्दे [email protected] को रिपोर्ट किए गए
07 AUG 2020 <- SuiteCRM ने रिपोर्ट प्राप्त करने की पुष्टि की और आंतरिक सुरक्षा टीम के साथ मुद्दा उठाया
21 AUG 2020 -> मैंने अनुवर्ती के लिए [email protected] से संपर्क किया
25 AUG 2020 <- SuiteCRM ने वेब सर्वर कॉन्फ़िगरेशन/XSS के बारे में उत्तर दिया
26 AUG 2020 -> मैंने यह कहने के लिए उत्तर दिया कि AllowOveride All का सुझाव XSS को कम करता है
16 SEP 2020 -> मैंने अनुवर्ती के लिए [email protected] से संपर्क किया
17 SEP 2020 <- SuiteCRM ने मुद्दे को आंशिक मुद्दे के रूप में पुष्टि करने के लिए उत्तर दिया
29 OCT 2020 अपडेट जारी किया गया
03 NOV 2020 -> मैंने यह सुनिश्चित करने के लिए [email protected] से संपर्क किया कि राइटअप जारी करने से पहले उनकी ओर से और कुछ आवश्यक नहीं है
05 NOV 2020 <- SuiteCRM ने उत्तर दिया
अब हमने इस मुद्दे के लिए एक पैच जारी कर दिया है और यह सार्वजनिक डोमेन में है, हमारे दृष्टिकोण से आपके लिए कमजोरियों पर ब्लॉग पोस्ट करने में कोई समस्या नहीं है।
05 NOV 2020 -> मेरे द्वारा CVE का अनुरोध किया गया
06 NOV 2020 <- CVE-2020-28328 जारी किया गया
उनके साथ काम करना बहुत आसान था और मैं निश्चित रूप से इस सॉफ़्टवेयर में कमजोरियों की खोज और रिपोर्टिंग जारी रखने की योजना बना रहा हूँ!