
सुरक्षा भेद्यता CVE 2024 3273 का विश्लेषण: D-Link उपकरणों में कमांड इंजेक्शन
D-Link Network Attached Storage (NAS) अर्थात नेटवर्क स्टोरेज डिवाइस, फ़ाइलों को संग्रहीत करने और साझा करने के लिए कंप्यूटर नेटवर्क से जुड़ी हार्ड ड्राइव (या ड्राइव्स) वाला एक उपकरण है। सामान्य बाहरी हार्ड ड्राइव के विपरीत, जो सीधे कंप्यूटर से जुड़ी होती है, नेटवर्क स्टोरेज डिवाइस लोकल नेटवर्क से जुड़ता है, जिससे कई उपयोगकर्ता या डिवाइस एक साथ फ़ाइलों का उपयोग और साझा कर सकते हैं। नेटवर्क स्टोरेज डिवाइस का उपयोग घरेलू और व्यावसायिक दोनों समाधानों में किया जाता है।
सुरक्षा अनुसंधान करने वाली कंपनी VulDB Coordination ने कुछ D-Link नेटवर्क स्टोरेज डिवाइसों में एक गंभीर सुरक्षा भेद्यता (CVE-2024-3273) खोजी, जो दुर्भावनापूर्ण उपयोगकर्ताओं को नेटवर्क पर कमांड इंजेक्शन करने तथा पीड़ित के डिवाइस में दुर्भावनापूर्ण प्रोग्राम कमांड चलाने की अनुमति देती है।
यह सुरक्षा भेद्यता केवल उन विशिष्ट D-Link डिवाइसों को प्रभावित करती है जिनका जीवनकाल समाप्त हो चुका है और निर्माता ने इन डिवाइसों के लिए सॉफ़्टवेयर तथा हार्डवेयर समर्थन बंद कर दिया है। निम्नलिखित मॉडल प्रभावित हैं:
इस सुरक्षा भेद्यता के लिए किसी अन्य कमजोरी का एक साथ शोषण भी आवश्यक है। दरअसल, हार्डकोडेड लॉगिन क्रेडेंशियल्स के कारण उत्पन्न बैकडोर नेटवर्क स्टोरेज डिवाइस को विशेष रूप से कमजोर बनाता है। यह बैकडोर सुरक्षा भेद्यता (CVE-2024-3272) है, जिसमें उपयोगकर्ता सभी प्रभावित डिवाइसों में डिफ़ॉल्ट रूप से मौजूद "सिस्टम उपयोगकर्ता" messagebus का उपयोग करके प्रमाणीकरण को दरकिनार कर सकता है।
इस Linux सिस्टम में डिफ़ॉल्ट रूप से मौजूद सिस्टम डेमॉन (system daemon) उपयोगकर्ता के साथ सीधे सिस्टम में लॉगिन नहीं किया जा सकता, लेकिन किसी विशिष्ट एंडपॉइंट पर कुशलता से तैयार किया गया HTTP अनुरोध भेजना ही नुकसान पहुँचाने के लिए पर्याप्त है।
लक्षित डिवाइस का ip address जानना भी आवश्यक है।
सुरक्षा भेद्यता नेटवर्क स्टोरेज डिवाइस की /cgi-bin/nas_sharing.cgi फ़ाइल में HTTP GET अनुरोध प्रोसेसिंग फ़ंक्शन में छिपी हुई है। दुर्भावनापूर्ण उपयोगकर्ता पीड़ित के डिवाइस पर नेटवर्क के माध्यम से GET अनुरोध भेज सकता है, जिसमें पैरामीटर के रूप में उपयोगकर्ता नाम "messagebus" शामिल होता है और पासवर्ड खाली छोड़ दिया जाता है। कमांड इंजेक्शन यहाँ system पैरामीटर का उपयोग करके होता है, जिसमें पैरामीटर के मान के रूप में वांछित प्रोग्राम कमांड निर्दिष्ट किया जाता है।
कमांड को base64 एन्कोडिंग में छिपाया जाता है और system पैरामीटर के मान के रूप में जोड़ा जाता है। बाद में डिकोड करने पर, दुर्भावनापूर्ण कमांड स्निपेट प्रकट होता है जो लक्षित डिवाइस में shell कमांड के रूप में निष्पादित होता है।
🗒️ CVSS बेस स्कोर: 7.3 उच्च
CVE-2024-3273 सुरक्षा भेद्यता का कारण CWE-77 अर्थात कमांड इंजेक्शन है। इसका अर्थ है कि हमलावर दुर्भावनापूर्ण कमांड दर्ज कर सकता है, जिन्हें लक्षित सिस्टम फिर निष्पादित करता है, क्योंकि दर्ज किए गए कमांड को मान्य नहीं किया जाता है।
चूँकि डिवाइसों का स्रोत कोड सार्वजनिक नहीं है, इसलिए संभवतः इस समस्या से बचने के लिए अनुरोधों को संभालने वाली विधि में एक सत्यापन फ़ंक्शन जोड़ा जाना चाहिए। उदाहरण के लिए, मनमाने कमांड के निष्पादन से बचने के लिए अनुमत सिस्टम कमांड की एक सूची हो सकती है।
सुरक्षा भेद्यता मुख्य रूप से निम्नलिखित सुरक्षा उद्देश्यों का उल्लंघन करती है:
यह सुरक्षा भेद्यता केवल उन डिवाइसों को प्रभावित करती है जिनका जीवनकाल समाप्त हो चुका है, इसलिए निर्माता डिवाइसों को बदलने और असुरक्षित डिवाइसों का उपयोग न करने की सलाह देता है।
चूँकि इन डिवाइसों को अब समर्थित नहीं किया जाता, वे अब सॉफ़्टवेयर सुरक्षा अपडेट भी प्राप्त नहीं कर सकते, जिसका अर्थ है कि सुरक्षा भेद्यता को ठीक नहीं किया जाएगा। इसलिए एकमात्र समाधान भेद्यता वाले उत्पादों का उपयोग बंद करना है।
यदि असुरक्षित डिवाइस को बदलना संभव नहीं है, तो डिवाइस को निश्चित रूप से सार्वजनिक नेटवर्क से हटा दिया जाना चाहिए, और चरम मामलों में केवल लोकल नेटवर्क पर उपयोग किया जाना चाहिए (बाहरी अनुरोधों को अवरुद्ध करने के लिए फ़ायरवॉल स्थापित किया जाना चाहिए)।
प्रारंभिक रिपोर्ट के अनुसार, भेद्यता की खोज के समय नेटवर्क पर 92 000 से अधिक डिवाइस थे। बाद के अध्ययन के अनुसार, यह संख्या काफी कम हो सकती है, लगभग 5500 डिवाइस। इसके बावजूद, आज भी संभवतः कई पुराने डिवाइस अभी भी नेटवर्क से जुड़े हुए हैं और इस प्रकार असुरक्षित हैं।
हमले की अवधारणा के कई प्रमाण (PoC) प्रकाशित किए गए हैं, और संभवतः इस सुरक्षा भेद्यता का अभी भी व्यापक रूप से शोषण किया जा रहा है। अब तक, कम से कम 146 मामले सामने आए हैं जिनमें CVE-2024-3273 सुरक्षा भेद्यता का शोषण करने का प्रयास किया गया है।
नमूना कोड का एक अंश:
def execute_command(ip, command: str = "id", verbose: bool = True) -> str:
command_hex = ''.join(f'\\\\x{ord(c):02x}' for c in command)
command_final = f"echo -e {command_hex}|sh".replace(' ', '\t')
base64_cmd: str = base64.b64encode(command_final.encode()).decode()
url: str = f"{ip}/cgi-bin/nas_sharing.cgi"
params: dict = {
"user": "messagebus",
"passwd": "",
"cmd": "15",
"system": base64_cmd,
}