
تحليل الثغرة الأمنية CVE 2024 3273: حقن الأوامر في أجهزة D-Link
جهاز التخزين الشبكي D-Link Network Attached Storage (NAS) أو التخزين المتصل بالشبكة هو جهاز يُوصَل بشبكة الحاسوب ويحتوي على قرص صلب (أو أقراص) لتخزين الملفات ومشاركتها. على عكس القرص الصلب الخارجي العادي الذي يتصل مباشرة بالحاسوب، يتصل جهاز التخزين الشبكي بالشبكة المحلية، مما يسمح لعدة مستخدمين أو أجهزة باستخدام الملفات ومشاركتها في الوقت نفسه. تُستخدم أجهزة التخزين الشبكي في حلول المنازل والشركات على حد سواء.
اكتشفت شركة أبحاث الأمان VulDB Coordination ثغرة أمنية حرجة في بعض أجهزة التخزين الشبكي من D-Link (CVE-2024-3273)، تتيح للمستخدمين الخبيثين تنفيذ أوامر عبر الشبكة، عبر تشغيل أوامر برمجية خبيثة في جهاز الضحية.
تؤثر هذه الثغرة الأمنية فقط على أجهزة D-Link معينة وصلت إلى نهاية دورة حياتها، وأوقفت الشركة المصنعة الدعم البرمجي والمادي لها. الطرازات المتأثرة هي:
تفترض هذه الثغرة الأمنية أيضًا استغلال ثغرة أخرى في الوقت نفسه. إذ يجعل الباب الخلفي الناتج عن بيانات تسجيل الدخول المبرمجة مسبقًا جهاز التخزين الشبكي عرضة للخطر بشكل خاص. هذا الباب الخلفي هو الثغرة الأمنية (CVE-2024-3272)، حيث يمكن للمستخدم تجاوز المصادقة باستخدام "مستخدم النظام" messagebus الموجود افتراضيًا في جميع الأجهزة المتأثرة.
صحيح أن مستخدم دايمون النظام (system daemon) الافتراضي في أنظمة Linux لا يمكنه تسجيل الدخول مباشرة إلى النظام، لكن يكفي إرسال طلب 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,
}