
ثغرة في توليد وإدارة مفتاح AES-CFB في تطبيق Reolink لسطح المكتب
يستخدم تطبيق Reolink لسطح المكتب (الإصدار 8.18.12) خوارزمية AES-CFB لتشفير ملفات الإعدادات والبيانات الحساسة الأخرى.
ومع ذلك، يتم التعامل مع مفتاح التشفير بطريقة غير آمنة، مما يسمح للمهاجمين بفك تشفير بيانات الإعدادات المحمية بسهولة.
يقوم تطبيق Reolink بتخزين إعدادات المستخدم والمعلومات الحساسة الأخرى في المسار التالي:
%APPDATA%\reolink\<UUID>.json
<UUID> لهذا التنسيق: 424e044d-aa27-4e59-873a-26b9f16be9ad
يتم تشفير ملف الإعدادات هذا باستخدام AES-CFB، ويتم اشتقاق مفتاح AES المستخدم لفك التشفير من خلال العملية التالية:
افتح الملف الموجود في المسار التالي:
%APPDATA%\com.reolink.app.client
يحتوي الملف على بيانات بتنسيق JSON، على سبيل المثال:
{
"data": "+lWlitlpr9vBiG71RCJYoPSJKVnUgGVbgu4v9W6K3N0kzgLv9HEQpqVi2fMnHdb7iWhYgb5KeRhYb6IPVWRR4kxTcwTDfQmMOvFWLuqHPRJBt9ozPSo4TYDXzjBN0YAW",
"__internal__": {
"migrations": {
"version": "8.18.12"
}
}
}
يستخدم التطبيق MD5("com.reolink.app").upper() كمفتاح AES الأساسي، وbcswebapp1234567 كقيمة IV. يتم فك ترميز السلسلة المشفرة (data) من base64 ثم فك تشفيرها. السلسلة التي تم فك تشفيرها لها هذا التنسيق: 59083200-3875-4f67-a067-d953286114a0
المفتاح النهائي هو MD5("<DECRYPTED_STRING>").upper().encode()، وتبقى قيمة IV كما هي (bcswebapp1234567). يُستخدم هذا لفك تشفير ملف الإعدادات، <UUID>.json.
من خلال تنفيذ poc.py، يمكنك الحصول على المفتاح النهائي قبل تجزئته بـ MD5 (بالتنسيق 59083200-3875-4f67-a067-d953286114a0) ومحتويات ملف الإعدادات.
لا ينبغي استخدام تجزئة سلسلة ثابتة مضمّنة في الكود، مثل com.reolink.app، كمفتاح أساسي.
بالإضافة إلى ذلك، لا ينبغي تخزين المفاتيح في ملف محلي يمكن التنبؤ به، مثل %APPDATA%. يجب استخدام مخازن مفاتيح آمنة قوية يوفرها نظام التشغيل، مثل Windows DPAPI أو macOS Keychain، لحماية جميع بيانات الاعتماد الحساسة.