Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2020-12124 — تنفيذ لإثبات المفهوم لـ CVE-2020-12124 | Kitploit
أدوات/GitHubGitHub/scorpion-security-labs/cve-2020-12124
أمان الأنظمة المدمجةأمان إنترنت الأشياءتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةاستغلال تطبيقات الويبالقيادة والسيطرةتحليل الملفات الثنائيةالأوراق والأبحاث

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
التعلم والتعليم
تحليل البرامج الثابتة
GitHubscorpion-security-labs/cve-2020-12124

CVE-2020-12124

تنفيذ لإثبات المفهوم لـ CVE-2020-12124

عرض المستودع
منذ 6 أشهرلم تتم المراجعة بعد

تشريح استغلال إنترنت الأشياء، من التطبيق العملي إلى تنفيذ الأوامر عن بُعد

نُشر في الأصل على https://www.klogixsecurity.com/scorpion-labs-blog/anatomy-of-an-iot-exploit-from-hands-on-to-rce

بقلم ديفيد إي. بيكر، نُشر في 1 يونيو 2023

مقدمة

تتعلق هذه الدراسة بالبرامج الثابتة لموجه Wavlink Wireless-AC1200 Gigabit اعتبارًا من يونيو 2020. قد تكون الثغرات التي تمت مناقشتها هنا قد تم تصحيحها من قبل البائع أو لا، لكن هذه حالة من أبحاث الثغرات التي ستظهر الرحلة كمكافأة بحد ذاتها بدلاً من نتيجتها. أجرى المؤلف هذا البحث قبل الإفصاح العام عن الثغرات، ولكن بعد أن تم اكتشافها بشكل مستقل من قبل باحثين آخرين وإبلاغ البائع بها.

يوفر البائع البرامج الثابتة لمنتجاتهم في قسم الدعم على موقعهم الإلكتروني؛ هذه طريقة شائعة للحصول على برامج إنترنت الأشياء الثابتة وبديل مفيد عن استخراجها من ذاكرة الجهاز. البرامج الثابتة غير مشفرة، لذا يمكن استخراجها بسهولة باستخدام binwalk. تم إجراء التحليل الديناميكي مع الوصول إلى نموذج مادي للجهاز، وتم إجراء التحليل الثابت عبر Ghidra.

خلاصة مختصرة

تحتوي الواجهة الإلكترونية لموجه Wavlink Wireless-AC1200 Gigabit على عدة نقاط نهاية ضعيفة تسمح بنسخ غير مقيد للبيانات التي يوفرها المستخدم إلى مكدس التطبيق أو حتى مباشرة إلى سطر الأوامر لتحقيق تنفيذ أوامر عشوائي.

التطبيق العملي والمحلي

تشير عمليات المسح الأولية للجهاز إلى أن المورد الوحيد المكشوف كان وحدة التحكم الإدارية عبر الويب، والتي يمكن الوصول إليها من قبل المستخدمين المصادق عليهم على واجهة LAN عبر HTTP على المنفذ TCP 80. يمكن للجهاز تقديم خدمات إضافية، لكن هذه الخدمات غير مفعلة افتراضيًا. بناءً على ذلك، يركز هذا التحقيق على الواجهة الإلكترونية فقط.


مسح nmap لجهاز النموذج، يظهر فقط واجهة الويب قيد الاستماع.

الاختبارات المعتادة — مثل حقن الأوامر النموذجية الموجودة في لوحات تشخيص الأجهزة التي تسمح بحقن الأوامر في معاملات أمر ping أو traceroute — لم تسفر عن أي نتائج مثيرة للاهتمام على الفور، وهو أمر مخيب للآمال.


خيارات الإدارة المتاحة بعد المصادقة على اللوحة الإدارية عبر الويب. يمكن رؤية "USB Storage" كخيار ثانٍ.

أول واجهة (قابلة للاستغلال في النهاية) تم فحصها هنا تم العثور عليها في لوحة "USB storage"، والتي يمكن رؤيتها كخيار ثانٍ في لقطة الشاشة أعلاه. يحتوي الجهاز على منفذ USB بجوار مقابس 802.2 Ethernet، مما يشير إلى أنه يمكن أن يوفر وظيفة تخزين متصل بالشبكة (NAS).


صورة للجزء الخلفي من النموذج الفعلي، تظهر توفر USB.

مبدأ بسيط في أبحاث الثغرات هو أنه كلما زاد عدد المكونات التي يتفاعل معها جزء من الكود وزاد عدد الأجزاء المتحركة لديه، زادت احتمالية وجود كود قابل للاستغلال في الجوار. وجود قدرات NAS واعدة لأنه يشير إلى وجود كود يتفاعل بشكل متزامن مع طبقة البرمجيات للجهاز، وطبقة العتاد، والمحيط المتصل (USB storage نفسه).

واجهة الإدارة لوحدة تحكم USB Storage موضحة أدناه. وجود حقل "Workgroup" وحده يعد واعدًا، حيث سيشير إلى أن هذا الموجه WiFi قد يحاول حتى التفاعل عبر Server Message Block (SMB) — وهو أمر كبير لموجه إنترنت الأشياء. لا يمكنني عد المرات التي رأيت فيها مدخلات يقدمها المستخدم تُرسل مباشرة إلى سطر الأوامر كوسيط لدالة Unix smbpasswd.


خيارات USB storage المتاحة للمستخدمين المصادق عليهم.

فشلت المحاولات الأولية لمعالجة هذه الإعدادات بسبب عدم اكتشاف الجهاز لمحرك أقراص USB، كما هو موضح أدناه.


لن يتم حفظ التغييرات في إعدادات USB Storage ما لم يتم توصيل محرك أقراص مهيأ بشكل مناسب يدويًا بمنفذ USB بالجهاز.

ومع ذلك، بمجرد توصيل محرك أقراص مهيأ بشكل صحيح، سمح الجهاز بتعيين اسم مستخدم وكلمة مرور لـ FTP. كما كان متوقعًا، قام بوضع هذا الإدخال المقدم من المستخدم على سطر الأوامر:


حقن أمر في حقل 'password' يحقق أول وصول إلى شل مباشرة إلى نظام تشغيل الجهاز.

على الرغم من كونها مثيرة للاهتمام، إلا أنه من الصعب الشعور بحماس كبير تجاه هذه الثغرة: فهي لا تتطلب فقط وصولاً معتمدًا إلى الواجهة الإدارية للجهاز بل تتطلب أيضًا وصولاً ماديًا إلى الجهاز لمعالجة محرك أقراص USB الخاص به. يسمح الاستغلال أعلاه للباحث بالتفاعل مع مكونات نظام التشغيل الفردية (واستخراجها لأغراض الهندسة العكسية).

يمكننا القيام بعمل أفضل

كان الجهاز نظامًا مركزيًا على BusyBox يعمل بنظام Linux مع واجهة ويب مدعومة من Lighttpd. تم توفير وظيفة Common Gateway Interface (CGI) من خلال ملفات ثنائية فردية في /etc_ro/lighttpd/www/cgi-bin/، حيث تؤدي طلبات الويب إلى URIs CGI إلى تشغيل هذه الملفات الثنائية مباشرة. نظرة سريعة على nas.cgi في Ghidra تُظهر حقن الأمر في السطر 38 أدناه، والذي يرسل كلمة مرور مقدمة من المستخدم مباشرة إلى دالة do_system (وهي نفسها مجرد غلاف حول استدعاء نظام libc القياسي).


يتم وضع إدخال المستخدم على سطر الأوامر كوسيط لبرنامج chpasswd.sh النصي في السطر 38، مما يؤدي إلى حقن أمر والوصول إلى شل مباشرة إلى نظام تشغيل الجهاز.

النظر من خلال دليل /cgi-bin/ يقلل من مهمة العثور على استغلال أكثر إثارة للاهتمام إلى تعداد واجهات CGI المتاحة للمستخدم، كما هو موضح أدناه.


قائمة شاملة للملفات الثنائية CGI المتاحة على الجهاز، مأخوذة مباشرة من الشل الذي تم إنشاؤه بواسطة الاستغلال الموصوف في هذا القسم. يتم وضع إدخال المستخدم على سطر الأوامر كوسيط لبرنامج chpasswd.sh النصي في السطر 38، مما يؤدي إلى حقن أمر والوصول إلى شل مباشرة إلى نظام تشغيل الجهاز.

تبرز عدة أشياء عند الفحص الأولي. أول شيء مهم يجب ملاحظته هو أن الملفات الثنائية CGI غالبًا ما تستدعي دالة check_valid_user. تبحث هذه الطريقة لمعرفة ما إذا كان عنوان IP الذي يقوم بالطلب مخزنًا في ملف مؤقت معين على نظام الملفات. يُظهر الاختبار البسيط أن حالة مصادقة العميل لا يتم التحقق منها حتى يتم استدعاء هذه الطريقة، لذا فإن كامل سطح الكود في كل ملف ثنائي CGI قبل استدعاء هذه الدالة يمكن الوصول إليه بدون مصادقة.


تفكيك adm.cgi يظهر طريقة check_valid_user. يتم تنفيذ جميع الكود قبل هذا الاستدعاء قبل التحقق من حالة مصادقة الطالب.

ملاحظة أخرى مثيرة للاهتمام هي العدد الكبير من الطرق التي تنسخ إدخال المستخدم المقدم مباشرة على المكدس. على سبيل المثال، يظهر تفكيك wireless.cgi معامل NewName المأخوذ من جسم طلب ويب في السطرين 14 و15 متبوعًا بنسخة strcpy غير محمية لهذا الإدخال من المستخدم على المكدس في السطر 34، كما هو موضح أدناه:


السطران 14 و34 يوضحان نسخة strcpy غير محمية لمعامل NewName من جسم الطلب مباشرة على مكدس البرنامج. تفكيك adm.cgi يظهر طريقة check_valid_user. يتم تنفيذ جميع الكود قبل هذا الاستدعاء قبل التحقق من حالة مصادقة العميل.

هذه النسخة من إدخال المستخدم على المكدس وحدها تشير إلى استغلال تلف الذاكرة، والذي يمكن التحقق منه باستخدام الأمر التالي:

root@kitploit:~
curl -XPOST --data "page=SetName&NewName=\`python3 -c 'print(\\"A\\"*(512)'\`" http://target-ip/cgi-bin/wireless.cgi

بينما يعد هذا واعدًا، فإن هجوم التوجيه بالعودة (return-oriented) ليس مثاليًا هنا. باستخدام الوصول إلى شل لنظام التشغيل الذي تم الحصول عليه بالفعل، يعرض الأمر التالي '1'، مما يظهر أن Address Space Layout Randomization (ASLR) يتم تطبيقه بشكل ضعيف، تاركًا لسلسلة ROP فرصة 1 من 256 لتهبط على الأداة المطلوبة:

root@kitploit:~
# cat /proc/sys/kernel/randomize_va_space
1

علاوة على ذلك، يوضح الأمر أدناه أن الملفات الثنائية ذات النهاية الصغيرة ( little-endian) تم تجميعها مع تعيين بايت حارس المكدس، لذا يمكن للأداة الأخيرة فقط في السلسلة أن تهبط في موقع محدد مسبقًا داخل الملف الثنائي. إذا كانت هناك عملية مراقبة (watchdog) لإعادة تشغيل خادم الويب بعد تعطل، فليس من المستبعد رمي استغلال توجيه بالعودة بشكل متكرر وتوقع النجاح في النهاية، لكن من الممكن أيضًا وجود أخطاء أفضل كامنة في مكان آخر في الكود.

root@kitploit:~
xxd /etc_ro/lighttpd/www/cgi-bin/wireless.cgi | head -n 10

أخطاء أفضل كامنة في مكان آخر في الكود

بالاستمرار في النظر عبر وظائف CGI، سيفحص المرء في النهاية live_api.cgi. لا يقوم هذا الملف الثنائي بأي استدعاء لـ check_valid_user، لذا فإن أي طلبات ويب إلى URI /cgi-bin/live_api.cgi تشغل تطبيق CGI بدون مصادقة. يظهر السطر 9 في الشكل 11 أن متغير البيئة QUERY_STRING، والذي (وفقًا لمواصفات Apache CGI) هو الجزء من URI الطلب الذي يلي علامة الاستفهام مباشرة وبالتالي مقدم من المستخدم، يتم تخزينه في pcVar1 وفي السطر 19 من الشكل 11 يتم إرساله إلى طريقة satellite_status.


تفكيك live_api.cgi يظهر إدخال المستخدم المأخوذ من URI في السطر 9 ويتم إرساله إلى satellite_status في السطر 19. تفكيك adm.cgi يظهر طريقة check_valid_user. يتم تنفيذ جميع الكود قبل هذا الاستدعاء قبل التحقق من حالة مصادقة العميل.

تفكيك طريقة satellite_status، الموضح في الشكل 12، يظهر أن سلسلة الاستعلام نفسها (الآن param_1) يتم تحليلها بحثًا عن معاملات page و id و ip. يتم نسخ معامل ip عبر دالة sprintf إلى متغير محلي في السطر 38 من الشكل 12، وفي السطر 39، يتم تمريره إلى دالة do_system. يشير غياب استدعاء check_user_auth إلى أن إدخال العميل العشوائي من مستخدم غير مصادق عليه في URI سيتم وضعه مباشرة على سطر الأوامر في معامل URI ip، تم تأكيد ذلك فيما يلي:


تفكيك دالة satellite_status، التي تظهر سلسلة الاستعلام (الآن param_1) يتم تحليلها بحثًا عن معامل ip في السطرين 22 و23، ثم إلى استدعاء do_system في السطرين 38 و39.


الدليل في النتيجة، يظهر الاستغلال المستخدم لتحقيق الاستيلاء عن بُعد على الجهاز.

الاستنتاجات

قد يبدو العثور على ثغرات في جهاز إنترنت الأشياء الجديد في السوق مثل ثمار منخفضة، كما ذكر في بداية هذا المنشور، لكن قيمة هذا التحقيق كانت في رحلته بدلاً من وجهته.

سيكون فهم تجاوز المصادقة وتحديد موقع حقن الأوامر غير محتمل، أو حتى مستحيل، بدون التحليل الثابت للبرامج الثابتة. لو لم تكن متاحة عبر الإنترنت، لكانت ستتطلب وصولًا ديناميكيًا إلى نظام تشغيل الجهاز للحصول عليها، والذي كانت ستكون آماله خافتة للوصول الديناميكي إلى الجهاز. هذا المستوى من الوصول بحد ذاته اعتمد على كل من الوصول المادي إلى الجهاز، وإما عتاد متخصص أو تخمين موجه للأماكن المحتملة في الكود التي قد تحدث فيها أخطاء.

نأمل أن تكونوا قد استمتعتم بهذه الرحلة، وأن تعودوا للمزيد. هنيئًا للاختراق!

المؤلف:

ديفيد بيكر، مستشار أمن أول، اختبار، K logix

المراجع

  • https://nvd.nist.gov/vuln/detail/CVE-2020-12266
  • https://nvd.nist.gov/vuln/detail/CVE-2020-15489
  • https://nvd.nist.gov/vuln/detail/CVE-2020-15490
  • https://nvd.nist.gov/vuln/detail/CVE-2020-12124
تنزيل الأداة