
रीलिंक डेस्कटॉप एप्लिकेशन में स्थानीय प्रमाणीकरण बायपास भेद्यता
Reolink डेस्कटॉप एप्लिकेशन (संस्करण 8.18.12) में इसकी लॉक स्क्रीन सुविधा में एक स्थानीय प्रमाणीकरण बाईपास भेद्यता शामिल है। एप्लिकेशन का स्रोत कोड ASAR संग्रह में पैकेज नहीं किया गया है, जिससे पासवर्ड सत्यापन जैसी महत्वपूर्ण प्रमाणीकरण तर्क, क्लाइंट-साइड JavaScript फ़ाइलों के भीतर सादे पाठ में उजागर हो जाती है। इस उजागर कोड में तर्क को केवल संशोधित करना पासवर्ड जांच को निष्क्रिय करने और लॉक स्क्रीन को बाईपास करने के लिए पर्याप्त है।
लॉक स्क्रीन पासवर्ड स्थानीय संसाधन बंडल में JavaScript कोड के माध्यम से संग्रहीत और पुनर्प्राप्त किया जाता है, विशेष रूप से:
%LOCALAPPDATA%\Programs\Reolink\resources\app\~node_modules_sharp_vendor_Sync_recursive_versions_json_~private_main_index_ts.js
प्रासंगिक कोड get_settings_lock_screen_password कमांड के लिए एक हैंडलर पंजीकृत करता है, जो a.settingsManager.lockScreenPassword प्रॉपर्टी से संग्रहीत पासवर्ड लौटाता है:
this.registerCommonCmd(
"get_settings_lock_screen_password",
"",
R(function () {
return N(this, function (e) {
return [2, a.settingsManager.lockScreenPassword];
});
}),
);
चूंकि यह तर्क पूरी तरह से क्लाइंट साइड पर रहता है, एक हमलावर रिटर्न मान को "" (एक खाली स्ट्रिंग) में पैच कर सकता है, जिससे लॉक स्क्रीन प्रभावी रूप से बाईपास हो जाती है:
return [2, ""];
इस फ़ाइल को संशोधित और सहेजने के बाद, एप्लिकेशन लॉक स्क्रीन को बिना पासवर्ड वाला मान लेगा, जिससे बिना किसी प्रमाणीकरण के पहुंच प्रदान हो जाएगी।
यह भेद्यता किसी भी स्थानीय हमलावर को फ़ाइल सिस्टम एक्सेस के साथ एप्लिकेशन-स्तरीय प्रमाणीकरण को बाईपास करने और एप्लिकेशन इंटरफ़ेस और सेटिंग्स तक पूर्ण पहुंच प्राप्त करने की अनुमति देती है।
चूंकि पासवर्ड किसी बाहरी स्रोत के विरुद्ध मान्य नहीं किया जाता है और संशोधन योग्य JavaScript के माध्यम से उजागर होता है, यह लॉक स्क्रीन कोई वास्तविक सुरक्षा प्रदान नहीं करती है।
कोड की सामग्री को poc.py निष्पादित करके छेड़छाड़ की जा सकती है।
निम्नलिखित स्क्रीनशॉट पैचिंग से पहले Reolink एप्लिकेशन की लॉक स्क्रीन दिखाता है, जिसमें पासवर्ड प्रॉम्प्ट सक्षम है:
निम्नलिखित स्क्रीनशॉट पैच लागू करने और पुनः आरंभ करने के बाद एप्लिकेशन दिखाता है, जिसमें कोई पासवर्ड प्रॉम्प्ट प्रदर्शित नहीं होता है:

एप्लिकेशन कोड को ASAR संग्रह में पैकेज किया जाना चाहिए, और स्टार्टअप पर ASAR फ़ाइल के हैश मान या हस्ताक्षर की जाँच जैसी अखंडता सत्यापन प्रक्रिया लागू की जानी चाहिए। किसी भी एप्लिकेशन के साथ छेड़छाड़ की गई है, उसे निष्पादित होने से रोका जाना चाहिए।
लॉक स्क्रीन पासवर्ड सत्यापन जैसी महत्वपूर्ण प्रमाणीकरण तर्क, जहाँ संभव हो, JavaScript के बजाय मूल बाइनरी कोड के भीतर संभाली जानी चाहिए, जिसके साथ छेड़छाड़ करना अधिक कठिन है, या सर्वर-साइड संचार के माध्यम से संसाधित की जानी चाहिए।