
WPManageNinja द्वारा FluentCRM में अनपैच्ड कमजोरी का जिम्मेदाराना खुलासा
अद्यतन 2023-06-12: अब आपको स्निपेट की आवश्यकता नहीं है। WPManageNinja ने सार्वजनिक प्रकटीकरण के दो घंटे बाद (रिपोर्ट करने के 93 दिन बाद) भेद्यता को पैच कर दिया।
अद्यतन 2024-01-27: स्थायी हैश मानों से संबंधित मुद्दा अब पूरी तरह से हल हो गया है।
tl;dr हमलावर FluentCRM में संपर्क विवरण देख और संपादित कर सकते हैं। WPManageNinja ने 90-दिवसीय जिम्मेदार प्रकटीकरण समय सीमा के भीतर भेद्यता को पैच नहीं किया है। मैं आधिकारिक पैच की प्रतीक्षा करते हुए भेद्यता शोषण को रोकने के लिए एक शमन स्निपेट प्रदान करता हूं।
आज, मैं WPManageNinja द्वारा लोकप्रिय WordPress प्लगइन FluentCRM में मिली एक भेद्यता के बारे में जानकारी प्रकाशित कर रहा हूं। भेद्यता, CVE-2023-1430, प्राधिकरण नियंत्रण के रूप में ईमेल पते के हैश के FluentCRM के अपर्याप्त उपयोग के कारण होती है। मैंने Google Zero की भेद्यता प्रकटीकरण नीति के अनुसार जिम्मेदारी से भेद्यता का खुलासा किया। WPManageNinja ने न तो 90-दिवसीय समय सीमा के भीतर पैच प्रदान किया है और न ही समय विस्तार का अनुरोध किया है।
इस रिपोर्ट में, contact FluentCRM संपर्क ऑब्जेक्ट को संदर्भित करता है, जबकि user WordPress उपयोगकर्ता ऑब्जेक्ट को संदर्भित करता है। एक संपर्क किसी उपयोगकर्ता से जोड़ा जा सकता है, लेकिन यह आवश्यक नहीं है। भेद्यता के शोषण के बारे में विवरण तब तक रोके गए हैं जब तक कोई आधिकारिक पैच उपलब्ध नहीं हो जाता। सुरक्षा पेशेवर पूरी रिपोर्ट के लिए मुझसे संपर्क कर सकते हैं ([email protected])।
FluentCRM चलाने वाली साइटों पर, एक हमलावर किसी संपर्क का नाम, ईमेल पता, और सूची सेटिंग देख और संपादित कर सकता है, यदि वह संपर्क का ईमेल पता जानता है। चूंकि संपर्क का नाम अक्सर मर्ज टैग के माध्यम से न्यूज़लेटर में शामिल किया जाता है, एक हमलावर संपर्क के नाम को अश्लील भाषा से बदल सकता है, जिससे वेबसाइट मालिक को अश्लील न्यूज़लेटर भेजने पड़ सकते हैं। यदि वेबसाइट व्यवस्थापक ने FluentCRM के प्रबंधन प्राथमिकताओं के लिए शॉर्टकोड को सक्षम किया है और इसे एक सार्वजनिक वेब पेज पर जोड़ा है, तो एक हमलावर सभी उजागर व्यक्तिगत जानकारी को देख और संपादित कर सकता है, जैसे शीर्षक, फोन नंबर, जन्म तिथि, और पता (FluentCRM कॉन्फ़िगरेशन पर निर्भर करता है)।
FluentCRM 30,000 से अधिक साइटों पर स्थापित है। FluentCRM साइटों के साइट व्यवस्थापक अपने चाइल्ड-थीम की functions.php फ़ाइल में मेरा शमन स्निपेट जोड़कर भेद्यता के शोषण को रोक सकते हैं।
स्निपेट भेद्यता को पैच नहीं करता है। यह FluentCRM के अनसब्सक्राइब करने के पृष्ठ (unsubscribe.php) और प्रबंधन प्राथमिकताओं के पृष्ठ (manage_subscription.php) पर भेद्य सामग्री को एक त्रुटि संदेश से बदल देता है जो संपर्क को इसके बजाय ईमेल के माध्यम से संपर्क करने के लिए कहता है। त्रुटि संदेश में ईमेल पता साइट का व्यवस्थापक ईमेल पता है (इसे स्निपेट से बदला जा सकता है)। शमन स्निपेट यह भी सुनिश्चित करता है कि गैर-लॉग-इन विज़िटर FluentCRM के भेद्य शॉर्टकोड (fluentcrm_pref) को रेंडर नहीं कर सकते। गैर-लॉग-इन विज़िटर इसके बजाय एक त्रुटि संदेश देखेगा जो उसे लॉग इन करने के लिए कहता है। सभी स्ट्रिंग्स प्रदान की गई पीओटी फ़ाइल से अनुवाद योग्य हैं।
मैं वेबसाइट मालिकों को सलाह देता हूं कि वे या तो मेरे द्वारा प्रदान किए गए शमन को लागू करें या अपना स्वयं का संगत शमन लागू करें। वेबसाइट मालिकों को अपने FluentCRM संपर्क डेटा की अखंडता की पुष्टि करनी चाहिए और, यदि संभव हो, तो संभावित डेटा लीक के लिए अपने लॉग की जांच करनी चाहिए। लॉग की जांच करना विशेष रूप से निम्नलिखित साइटों के लिए महत्वपूर्ण है:
वेबसाइट का नियुक्त डेटा नियंत्रक प्रभावित क्षेत्राधिकारों में कानूनों और विनियमों के अनुसार व्यक्तिगत जानकारी के संभावित डेटा लीक को संभालेगा।
यदि FluentCRM को किसी संपर्क की सेटिंग्स को उसके संगत उपयोगकर्ता से सिंक करने के लिए कॉन्फ़िगर किया गया है, तो एक हमलावर उपयोगकर्ता का नाम बदल सकता है। सौभाग्य से, FluentCRM संपर्कों से उपयोगकर्ताओं में ईमेल पतों को सिंक नहीं करता है। यदि FluentCRM ऐसा करता, तो यह भेद्यता पूर्ण साइट अधिग्रहण को सक्षम बनाती। एक हमलावर साइट व्यवस्थापक का ईमेल पता बदलकर और फिर व्यवस्थापक का पासवर्ड रीसेट करके विशेषाधिकार प्राप्त पहुंच प्राप्त कर सकता था।
हालांकि, अन्य समाधान संपर्कों से उपयोगकर्ताओं में सभी मेटाडेटा को सिंक कर सकते हैं, जैसे WP Fusion और FluentCRM का API। WP Fusion संभवतः CRM (जैसे FluentCRM) और WordPress के बीच संपर्कों के मेटाडेटा को सिंक करने के लिए सबसे लोकप्रिय तृतीय-पक्ष प्लगइन है। सौभाग्य से, WP Fusion का वर्तमान संस्करण भेद्य फॉर्मों से शुरू किए गए मेटाडेटा परिवर्तनों से जुड़ा नहीं है। मैंने WP Fusion के डेवलपर्स को सूचित किया है, और वे तब तक इस सीमा को संबोधित नहीं करेंगे जब तक WPManageNinja भेद्यता को पैच नहीं कर देता।
FluentCRM का API संपर्क और उपयोगकर्ता डेटा को अपडेट करने के लिए भी उपयोग किया जा सकता है। साइट मालिक जो उपयोगकर्ताओं के ईमेल पतों को अपडेट करने के लिए FluentCRM के API का उपयोग करते हैं, उन्हें इस अपडेट को तब अक्षम करना होगा जब यह FluentCRM के पृष्ठ या प्रबंधन प्राथमिकताओं के शॉर्टकोड से शुरू हो (या मेरा शमन स्निपेट जोड़ें ताकि भेद्य फॉर्मों से कोई सेटिंग अपडेट न हो)।
FluentCRM संपर्कों को सार्वजनिक वेब पेजों से अनसब्सक्राइब करने और प्राथमिकताएं प्रबंधित करने देता है। इन पृष्ठों के लिंक प्रत्येक न्यूज़लेटर में शामिल होते हैं। इन पृष्ठों पर किए गए परिवर्तनों को संपर्कों के ईमेल पतों के MD5 हैश द्वारा अधिकृत किया जाता है, जो URL पैरामीटर के रूप में पारित होते हैं। किसी ईमेल पते का MD5 हैश कोई रहस्य नहीं है और किसी के द्वारा भी गणना की जा सकती है। एक हमलावर हैश के गलत उपयोग का शोषण करके विशिष्ट संपर्कों को अनसब्सक्राइब कर सकता है या ज्ञात ईमेल पतों वाले संपर्कों को सामूहिक रूप से अनसब्सक्राइब कर सकता है।
जबकि अनसब्सक्रिप्शन पृष्ठ पूरी तरह से प्राधिकरण के लिए MD5 हैश पर निर्भर करता है, प्रबंधन प्राथमिकताओं का पृष्ठ ce_id नामक एक अतिरिक्त URL पैरामीटर की आवश्यकता है। इस मामले में, ce_id fc_subscribers तालिका में संपर्क के आईडी को संदर्भित करता है। यह आईडी एक वृद्धिशील पूर्णांक है। इसलिए ce_id मान सभी संभावित मानों का परीक्षण करके आसानी से पाया जा सकता है (खोज स्थान साइट पर कभी पंजीकृत संपर्कों की संख्या है)। व्यवस्थापक उपयोगकर्ताओं के शायद कम मान होते हैं।
प्रबंधन प्राथमिकताओं के पृष्ठ से, एक हमलावर संपर्क के secure_hash मान को भी निकाल सकता है। संपर्क के ईमेल पते को अपडेट करके, संपर्क का "secure_hash" मान fc_hash_secure नामक कुकी में संग्रहीत किया जाता है। इस कुकी के साथ, हमलावर FluentCRM के प्राथमिकता फॉर्म शॉर्टकोड द्वारा उपलब्ध कराई गई सभी संपर्क जानकारी प्रदर्शित कर सकता है।
पूर्वोक्त "secure_hash" एक मान है जिस पर FluentCRM (कुछ स्थितियों में) MD5 ईमेल पता हैश के बजाय या विकल्प के रूप में निर्भर करता है। FluentCRM 2.8.0 के रिलीज़ के बाद से, अनसब्सक्राइब पृष्ठ पूरी तरह से प्राधिकरण के लिए secure_hash मान पर निर्भर करता है। प्रबंधन प्राथमिकताओं का पृष्ठ प्राधिकरण के लिए नए secure_hash मान और पुराने MD5 ईमेल पता हैश दोनों को स्वीकार करता है।
जबकि secure_hash मान ईमेल पते से प्राप्त नहीं किया जा सकता, FluentCRM का उपयोग अच्छी सुरक्षा प्रथाओं का पालन नहीं करता है। secure_hash मान प्रति संपर्क एक बार उत्पन्न होता है। इसे कभी अपडेट नहीं किया जाता, और यह कभी समाप्त नहीं होता। यह समस्याग्रस्त है क्योंकि secure_hash मान प्रत्येक न्यूज़लेटर में शामिल होता है। यदि कोई हमलावर किसी संपर्क के इनबॉक्स तक पहुंच प्राप्त करता है, तो हमलावर अनिश्चित काल तक संपर्क की सेटिंग्स बदल सकता है। यदि प्रभावित संपर्क व्यवस्थापक अधिकारों वाले उपयोगकर्ता से जुड़ा है, और ईमेल पता परिवर्तन FluentCRM से WordPress में सिंक किए जाते हैं, तो इस संपर्क को भेजा गया प्रत्येक न्यूज़लेटर में साइट पर कब्जा करने के लिए एक कभी-समाप्त न होने वाला टोकन होगा।
मैंने यह संबंधित मुद्दा 2023-03-15 को WPManageNinja को रिपोर्ट किया। दो महीने बाद (2023-05-15), WPManageNinja ने उत्तर दिया कि उनके सुरक्षा सलाहकार स्थिर secure_hash मान को कोई मुद्दा नहीं मानते। WPManageNinja के सुरक्षा सलाहकारों ने कहा कि "संपर्क की पहचान करने के लिए इस प्रकार के एक बार उत्पन्न टोकन का उपयोग करना ठीक है" और यह "SaaS सेवाओं के API टोकन के समान है जो किसी अन्य संपर्क को नहीं दिए जाते बल्कि केवल उस वास्तविक संपर्क को भेजे जाते हैं जो ईमेल पते का मालिक है"।
WPManageNinja खुले विचारों वाले थे और उन्होंने मुझसे कहा कि यदि मैं अभी भी इसे सुरक्षा चिंता मानता हूं तो उन्हें बताएं, जो मैंने किया। मैंने समझाया कि secure_hash मानों की तुलना API टोकन से क्यों नहीं की जा सकती। (API टोकन को यह सुनिश्चित करके बनाया जा सकता है कि वे केवल TLS कनेक्शन पर भेजे जाएं, और API टोकन तक पहुंच को प्रतिबंधित किया जा सकता है। ईमेल में स्पष्टटेक्स्ट मानों के मामले में ऐसा नहीं है। सबसे महत्वपूर्ण बात, API टोकन को रद्द किया जा सकता है जबकि संपर्क के लिए secure_hash मान को रद्द करने का कोई तरीका नहीं है।)
उसी दिन बाद में, WPManageNinja ने मुझे धन्यवाद दिया और कहा कि वे ईमेल रिकॉर्ड आईडी को हैश के साथ संयोजित करने पर विचार कर रहे हैं। यदि पुराने (समय-आधारित समाप्ति) या पिछले (काउंटर-आधारित समाप्ति) secure_hash मानों के स्वचालित निरस्तीकरण के साथ लागू किया जाए तो यह मुद्दा हल हो जाएगा। यह सुविधा अभी तक लागू नहीं की गई है, लेकिन मैं स्थिर हैश मानों के उपयोग को इस CVE का हिस्सा नहीं मानता।
Q1 2023 में, हमने अपने पिछले न्यूज़लेटर टूल (Sendy) से FluentCRM में स्थानांतरित करना शुरू किया। मुझे निक्का सिस्टम्स अकादमी (प्रोजेक्ट ओपल) के साथ FluentCRM को एकीकृत करते समय भेद्यता मिली। चूंकि हमने FluentCRM की सदस्यता प्रबंधन प्रणाली को अपने कस्टम प्लगइन से बदल दिया, FluentCRM के भेद्य फॉर्मों ने कभी हमारी साइट या हमारे ग्राहकों के डेटा को प्रभावित नहीं किया।
FluentCRM एक बेहतरीन प्लगइन है, लेकिन WPManageNinja द्वारा भेद्यता प्रकटीकरण को संभालने में बहुत सुधार की गुंजाइश है। निम्नलिखित सूची मेरा सुझाव है कि WPManageNinja स्थिति में सुधार कैसे कर सकता है।
ऐसा कहने के बाद, मुझे अभी भी WPManageNinja पर भरोसा है। सभी सॉफ्टवेयर में बग हैं, और एक अकेली गलत तरीके से प्रबंधित भेद्यता रिपोर्ट उनके प्लगइन्स का उपयोग बंद करने का कारण नहीं है।
अद्यतन 2023-06-12: तथ्य यह है कि उन्होंने अभी भी अपने चेंजलॉग में भेद्यता को छिपाने की कोशिश की, मुझे वास्तव में चिंतित करता है। (उन्होंने अब CVE जोड़ दिया है।)