
ثغرة تجاوز المصادقة المحلية في تطبيق Reolink لسطح المكتب
يحتوي تطبيق 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، حيثما أمكن، أو معالجته عبر الاتصال من جانب الخادم.