
قم بتصحيح جهاز D-Link الخاص بك المتأثر بـ CVE-2024-3272
هل أنت واحد من أكثر من 92,000 شخص1 عالق مع NAS من D-Link معرض لـ CVE-2024-3272، ولا يوجد تحديث في الأفق؟
تستخدم هذه الأداة الثغرة نفسها لتطبيق التصحيح على جهاز معرض.
1: راجع الإفصاح الأصلي في المراجع
سينفذ Dinkleberry أمرًا لاستبدال ملف nas_sharing.cgi المعرض بنسخة مصححة - مع استبدال استدعاء system() بـ NOPs.
مجلد /usr/local/modules (حيث يوجد الملف) للقراءة فقط، لذا يتم إنشاء نسخة في /usr/local/config، ويتم تحديث الرابط الرمزي في /var/www/cgi-bin ليشير إلى الإصدار الأكثر أمانًا.
اخترت فقط تعطيل (NOP) لاستدعاء النظام بحيث يستمر الأمر في الاستجابة كالمعتاد، ولكن دون تنفيذ أي شيء فعليًا.
[!NOTE] يتم تحميل نظام الملفات من الذاكرة الفلاش عند الإقلاع. تطبيق هذا التصحيح سيعمل فقط حتى إعادة تشغيل الجهاز. إذا كنت تريد حلاً دائمًا، ستحتاج إلى إعادة برمجة البرنامج الثابت - ربما باستخدام Debian
aliask:~/git/dinkleberry$ python3 ./src/main.py -h 10:01:02
usage: dinkleberry [-h] [--telnet] [--kill-telnet] [--test] [--verbose] target
positional arguments:
target Target NAS to patch
options:
-h, --help show this help message and exit
--telnet Start telnet server
--kill-telnet Stop telnet server
--test Test if device is vulnerable
--verbose, -v Set this to print debug messages
إذا لم يتم تطبيق أي خيارات اختيارية، ينفذ السكربت التصحيح.
إذا كنت فقط تريد التجول في الجهاز، استخدم الأمر --telnet، الذي يبدأ جلسة telnet على المنفذ 23.
هذا غير آمن بشكل مضحك، لكن جهازك غير آمن بالفعل بشكل مضحك، لذا قد تستغل القشرة المريحة.
[!CAUTION] استخدم هذه الأداة على مسؤوليتك الخاصة. إنها تقوم بتعديل برامج الجهاز الفعلية.
لست مسؤولاً عن:
- توقف جهازك عن العمل
- فقدان البيانات المخزنة على NAS
- نشوب حريق
- انزعاج هاكر كان يستغل جهازك بسعادة
أثناء التحليل لثنائيات nas_sharing.cgi وlibsmbif.so، أصبح واضحًا بسرعة أن البرنامج على هذا الجهاز ضعيف جدًا. ضعيف لدرجة أنه يحتاج إلى إعادة كتابة من الصفر.
هناك حوالي 80 استدعاء لـ system() في nas_sharing.cgi وحده - الكثير منها له مسار لإدخال المستخدم. لم أتعب نفسي بتحليلها كلها للبحث عن المزيد من الثغرات لإصلاحها، لكن إليك مثال من الدرجة الأولى:
/* Why use system() instead of libc fopen/fwrite?
What if you want to write a long string or your filename is long?
Painfully obvious command injection playground 🤦 */
void append_to_file(const char* string, const char* file) {
char s_cmd[1024];
sprintf(s_cmd, "echo %s >> %s", string, file);
system(s_cmd);
return;
}
بالإضافة إلى كل هذه الاستدعاءات المجنونة لـ system()، هناك تجاوزات سعة مخزنية أكثر مما يمكنك لمسه بعصا - وأنا أستطيع لمس الكثير من العصي.
هذا CVE موجود في قائمة KEV التابعة لـ CISA - إذا كان لديك أحد هذه الأجهزة على الإنترنت، قم بفصله الآن. فورًا.
ربما حتى اتبع نصيحة D-Link واستبدل الجهاز الذي انتهى دعمه. لكنني بالتأكيد لن أشتري منتجًا من D-Link.