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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-40154 — إثبات المفهوم (POC) لاختبار ثغرة BootROM الموجودة في LPC55S69 و K82 Series | Kitploit
أدوات/GitHubGitHub/jeromeyoung/cve-2021-40154
أمان الأنظمة المدمجةتحليل الثغرات الأمنيةالاستغلالالاختبار العشوائيأمن الأجهزةاستغلال الملفات الثنائية
GitHubjeromeyoung/cve-2021-40154

CVE-2021-40154

إثبات المفهوم (POC) لاختبار ثغرة BootROM الموجودة في LPC55S69 و K82 Series

عرض المستودع
632منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

CVE-2021-40154

ثغرات تجاوز سعة القراءة في برمجة النظام عبر USB (ISP) لـ LPC55S69 و K82

POC لاختبار ثغرة BootROM الموجودة في سلسلة LPC55S69 و K82 المراجعة A2. تم إصلاح الثغرة في الأجهزة الأحدث مع المراجعة الأحدث A3 لـ LPC55S69.

الأجهزة المعرضة للخطر:

  • مؤكد: سلسلة المتحكمات الدقيقة LPC55S69 و K82
  • مشتبه به: سلسلات أخرى من متحكمات NXP الدقيقة ذات مكدس USB ISP مماثل - سلسلة Kinetis K وسلسلة RT

ملخص الثغرة:

تم ملاحظة ثغرة تجاوز سعة القراءة في وضع برمجة النظام عبر USB (ISP) لسلسلتي المتحكمات الدقيقة NXP LPC55s69 و Kinetis K82. عند استغلالها، تسمح الثغرة للمهاجم بقراءة 16 كيلوبايت (LPC55S69) و64 كيلوبايت (K82) من البيانات من ذاكرة الفلاش المحمية.

التفاصيل التقنية:

توفر متحكمات NXP LPC55S69 و K82 أوضاع برمجة داخل النظام (ISP) لتحديث البرامج الثابتة للمتحكم في الميدان باستخدام الأجهزة الطرفية مثل USB و SPI و UART و I2C. يوفر وضع ISP عبر USB مضيفًا مدمجًا لتحديث البرامج الثابتة عبر أوامر التحديث الموثقة من NXP.

يعتبر ISP جزءًا من BootROM لكل من LPC55S69 و K82، ويتم تشغيله بناءً على قيم بعض بتات السجلات، ودبوس ISP، وتعريف رأس الصورة. بالنسبة لـ LPC55S69، يتم استخدام فئة HID USB لتحميل صورة من منفذ USB0/1، وبالمثل، بالنسبة لـ K82، يدعم محمل الإقلاع Kinetis في ROM تحميل البيانات إلى الفلاش عبر الطرفية USB كفئة HID USB.

يستخدم ISP USB لكل من سلسلتي ICs LPC55S69 و K82 ثلاث نقاط نهاية (3)، وهي مدرجة أدناه:

  • تحكم (0)
  • مقاطعة داخلة (1)
  • مقاطعة خارجة (2)

تم ملاحظة ثغرة تجاوز سعة القراءة لنقطة النهاية التحكمية USB 0، والتي تُستخدم لتعداد المضيف USB.

إثبات المفهوم

الهدف 1: LPC55S69

تم ملاحظة ثغرة تجاوز سعة القراءة في طلب GET Descriptor Configuration من مضيف USB المدمج. يمكن للمهاجم طلب ما يصل إلى 16 كيلوبايت من بيانات الاستجابة، عند صياغة طلب USB لإرسال GET Descriptor Configuration، عن طريق تعديل قيمة "wlength" إلى 65535 بايت. يحد LPC55S69 ويعيد التعيين عندما يتم نسخ 16 كيلوبايت من البيانات إلى مخزن إرسال USB ويتم إرسالها بنجاح إلى المضيف.

تفاصيل الجهاز:

  • لوحة التطوير المستهدفة: LPC55S69 – EVK RevA2
  • مضيف USB: Ubuntu 20.04 أو Raspberry-pi 4 Model B

خطوات إعادة إنتاج الثغرة:

  1. في لوحة التطوير LPC55S69 – EVK RevA2، يتم تشغيل ISP USB بالضغط على زر ISP وزر إعادة التعيين.
  2. قم بتوصيل منفذ USB 1 عالي السرعة بجهاز كمبيوتر محمول يعمل بنظام Ubuntu أو Raspberry-pi.
  3. يتم اكتشاف لوحة LPC كجهاز USB مركب كما هو موثق في الشكل 1.

الشكل 1: أداة dmesg في Ubuntu تظهر تفاصيل جهاز USB

root@kitploit:~
[43295.318228] usb 1-1.4: USB disconnect, device number 95
[43296.175536] usb 1-1.4: new full-speed USB device number 96 using xhci_hcd
[43296.397315] usb 1-1.4: New USB device found, idVendor=1fc9, idProduct=0021, bcdDevice= 3.00
[43296.397331] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[43296.397337] usb 1-1.4: Product: USB COMPOSITE DEVICE
[43296.397342] usb 1-1.4: Manufacturer: NXP SEMICONDUCTOR INC.
[43296.400768] hid-generic 0003:1FC9:0021.0055: hiddev0,hidraw4: USB HID v1.00 Device [NXP SEMICONDUCTOR INC. USB COMPOSITE DEVICE] on usb-0000:00:14.0-1.4/input0
  1. قم بتوصيل محلل USB بين اللوحة المستهدفة والكمبيوتر الشخصي، أو استخدم وحدة نواة لينكس "usbmon" لالتقاط حزم USB:
  • إذا كنت تستخدم USBmon في Ubuntu، قم بتشغيل هذا الأمر "sudo modprobe usbmon".
  • أثناء استخدام "lsusb"، لاحظ عنوان الناقل والجهاز.
  • قم بتشغيل "sudo wireshark"، واتصل بواجهة USBMON1/2 بالرجوع إلى رقم الناقل من "lsusb".
  1. في Wireshark، قم بتصفية عنوان جهاز USB بالرجوع إلى رقم الناقل من "lsusb".
  2. قم بتشغيل إثبات المفهوم (PoC) "sudo python3 LPC_USB.py" في Ubuntu. لتنفيذ سكريبت Python بنجاح، هناك حاجة للمتطلبات التالية في كمبيوتر مضيف USB: أ. تثبيت Python 3+ ب. تثبيت وحدة "pyusb"
root@kitploit:~
sudo python3 LPC_USB.py 
  1. تحقق من تجاوز سعة القراءة بفحص الطلب والاستجابة من تتبعات USB، كما هو موثق في الشكل 2؛ يوضح الشكل 3 بدلاً من ذلك تتبع محلل USB. سيكون استجابة USB بحجم 4 كيلوبايت.

الشكل 2

الشكل 3

ملاحظة 1: يمكن طلب تجاوز سعة القراءة بحجم 4 كيلوبايت في نظام Ubuntu بسبب قيود Libusb "MAX_CTRL_BUFFER_LENGTH". يمكن تعديل ذلك في نظام Raspberry-pi وطلب 16 كيلوبايت. البرنامج الثابت المرفق "LPC.bin" المستخرج من لوحة LPC55s69-EVK باستخدام Raspberry-pi 4 model b.

إذا كنت ترغب في إصدار طلبات أكبر من 4 كيلوبايت، استخدم هذا السكريبت الرائع الذي أنشأه Horac على Raspi وقم بتشغيل POC مع تغيير wlength إلى 65535 (0xffff).

الهدف 2: Kinetis K82

تم ملاحظة ثغرة تجاوز سعة القراءة في طلب GET Status-Other من مضيف USB مدمج. يمكن للمهاجم طلب ما يصل إلى 64 كيلوبايت من بيانات الاستجابة، عند صياغة طلب USB لإرسال GET status-Other، عن طريق تعديل قيمة "wlength" إلى 65535 بايت. يرسل جهاز USB K82 بنجاح 64 كيلوبايت من البيانات.

تفاصيل الجهاز:

  • لوحة التطوير المستهدفة: FRDM-K82F
  • مضيف USB: كمبيوتر محمول Ubuntu أو Raspberry-pi
root@kitploit:~
sudo python3 K82_USB.py 

ملاحظة 1: يمكن طلب تجاوز سعة القراءة بحجم 4 كيلوبايت في نظام Ubuntu بسبب قيود Libusb "MAX_CTRL_BUFFER_LENGTH". يمكن تعديل ذلك في نظام Raspberry-pi وطلب 64 كيلوبايت.

ملاحظة 2: يتم إعادة إنتاج الثغرة في K82 فقط عندما تتم طلبات USB لـ GET status-Device و Interface و Endpoint وغيرها بالتتابع لتحفيز الثغرة. يمكن تحقيق ذلك عن طريق تشغيل سكريبتات POC المطورة بعد عدة إعادة تعيينات ISP.

إذا كنت ترغب في إصدار طلبات أكبر من 4 كيلوبايت، استخدم هذا السكريبت الرائع الذي أنشأه Horac على Raspi وقم بتشغيل POC مع تغيير wlength إلى 65535 (0xffff).

تنزيل الأداة