
استغلال لثغرة CVE-2020-0225 في حزمة بلوتوث Fluoride في نظام أندرويد، مما يتيح تنفيذ التعليمات البرمجية عن بُعد عبر حزمة بلوتوث مُصمَّمة خصيصًا. يتضمن تعليمات البناء لكل من AOSP وLinux.
ما عليك سوى بناء AOSP - حيث أن Fluoride موجود هناك افتراضيًا.
إرشادات خاصة بـ Ubuntu، تم اختبارها على الإصدار 14.04 مع Clang 3.5.0 وعلى الإصدار 16.10 مع Clang 3.8.0
mkdir ~/fluoride
cd ~/fluoride
git clone https://android.googlesource.com/platform/system/bt
تثبيت التبعيات (يتطلب صلاحيات sudo):
cd ~/fluoride/bt
build/install_deps.sh
ثم جلب تبعيات الأطراف الثالثة:
cd ~/fluoride/bt
mkdir third_party
cd third_party
git clone https://github.com/google/googletest.git
git clone https://android.googlesource.com/platform/external/aac
git clone https://android.googlesource.com/platform/external/libchrome
git clone https://android.googlesource.com/platform/external/libldac
git clone https://android.googlesource.com/platform/external/modp_b64
git clone https://android.googlesource.com/platform/external/tinyxml2
وكذلك تبعيات الأطراف الثالثة الخاصة بتبعيات الأطراف الثالثة:
cd fluoride/bt/third_party/libchrome/base/third_party
mkdir valgrind
cd valgrind
curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/valgrind.h?format=TEXT | base64 -d > valgrind.h
curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/memcheck.h?format=TEXT | base64 -d > memcheck.h
ملاحظة: إذا تم سحب system/bt داخل AOSP، فأنشئ روابط رمزية بدلاً من تنزيل المصادر
cd system/bt
mkdir third_party
cd third_party
ln -s ../../../external/aac aac
ln -s ../../../external/libchrome libchrome
ln -s ../../../external/libldac libldac
ln -s ../../../external/modp_b64 modp_b64
ln -s ../../../external/tinyxml2 tinyxml2
ln -s ../../../external/googletest googletest
cd ~/fluoride/bt
gn gen out/Default
cd ~/fluoride/bt
ninja -C out/Default all
سيؤدي هذا إلى بناء جميع الأهداف (المكتبة المشتركة، الملفات التنفيذية، الاختبارات، إلخ) ووضعها في out/Default. لبناء هدف فردي، استبدل "all" بالهدف الذي تختاره، على سبيل المثال ninja -C out/Default net_test_osi.
cd ~/fluoride/bt/out/Default
LD_LIBRARY_PATH=./ ./bluetoothtbd -create-ipc-socket=fluoride
اتبع إرشادات إعداد Eclipse الخاصة بمشروع Chromium حتى قسم "Optional: Building inside Eclipse" (لا تقم بهذا القسم، فسوف نقوم بإعداده بطريقة مختلفة)
قم بإنشاء إعدادات Eclipse:
cd system/bt
gn gen --ide=eclipse out/Default
في Eclipse، اختر File->Import->C/C++->C/C++ Project Settings، ثم حدد موقع XML تحت system/bt/out/Default
انقر بزر الماوس الأيمن على المشروع. انتقل إلى Preferences->C/C++ Build->Builder Settings. قم بإلغاء تحديد "Use default build command"، واستخدم بدلاً من ذلك "ninja -C out/Default"
انتقل إلى تبويب Behaviour، وغيّر أمر التنظيف إلى "-t clean"