
التنفيذ المرجعي الرسمي والتحقق من الثغرة الأمنية لهجومنا WhisperPair (CVE-2025-36911) الذي يؤثر على بروتوكول Fast Pair من جوجل.
أداة عملية لاختبار ما إذا كانت أجهزة Google Fast Pair عرضة لهجمات الاقتران، وربط الحساب، والهجمات على مستوى البروتوكول.
يوفّر هذا المستودع منصة اختبار WhisperPair، وهي أداة لتقييم أمان أجهزة Google Fast Pair. صُمّمت لتمكين كلٍّ من الباحثين والممارسين من إعادة إنتاج نتائجنا واختبار أجهزتهم الخاصة.
للحصول على نظرة عامة حول المشروع والأجهزة المتأثرة وسياق إضافي، يرجى زيارة موقعنا.
يحتوي هذا المستودع أيضاً على الأداة البرمجية (artefact) المصاحبة للورقة البحثية One Tap to Hijack Them All: A Security Analysis of the Google Fast Pair Protocol، التي نُشرت في IEEE S&P 2026.
النسخة الكاملة من الورقة متاحة هنا. إذا وجدت هذا العمل مفيداً، فيرجى التفكير في الاستشهاد بالورقة:
@inproceedings{whisperpair2026,
title = {One Tap to Hijack Them All: A Security Analysis of the Google Fast Pair Protocol},
author = {Duttagupta, Sayon and Wyns, Seppe and Antonijević, Nikola and Singelée, Dave and Preneel, Bart},
booktitle = {2026 IEEE Symposium on Security and Privacy (S\&P)},
year = {2026},
}
المواد مقدّمة لتمكين إعادة إنتاج تقييمنا ومساعدة الباحثين في إجراء اختبارات دفاعية. استخدم هذه المواد فقط في أبحاث أمنية مصرّح بها وتحقق دفاعي على أجهزة تملكها أو لديك إذن صريح لاختبارها. نظراً لأن الكود الموجود في هذا المستودع يستعرض ثغرات في الملحقات الاستهلاكية، فلا تستخدمه لمهاجمة أجهزة طرف ثالث دون إذن كتابي واضح. أجرى المؤلفون جميع التجارب على أجهزة يملكها فريق المشروع أو تم التبرع بها بموافقة مستنيرة. باستخدامك هذه الأدوات، فإنك توافق على استخدامها فقط للبحث الدفاعي، أو إعادة إنتاج نتائجنا، أو الاختبار الذاتي للأجهزة.
[!NOTE] ملخص: تأكد من أن لديك جهازاً يعمل بنظام Linux مع محول Bluetooth، وأن Node.js (LTS) وpnpm مثبتان.
يمكنك تشغيل كل من واجهة المستخدم والخادم على نفس الجهاز عن طريق تنفيذbash build.shثمbash start.sh.
يحتوي هذا المستودع على منصة اختبار لتقييم ما إذا كان الجهاز المستهدف يطبّق بشكل صحيح بعض المتطلبات الأمنية لتقنية Google Fast Pair. يمكن للمنصة اختبار ما إذا كان مسند حالة الاقتران (pairing state predicate) مطبّقاً بشكل صحيح، وما إذا كانت الرسائل التي يعاد فيها استخدام nonce مرفوضة، وما إذا كان الجهاز عرضة لهجوم المنحنى غير الصالح. تتكون المنصة من خادم خلفي وواجهة ويب أمامية.
[!NOTE] إذا كنت تبحث عن تنفيذ الهجمات تحديداً: يحتوي
./toolkit-server/src/fast-pair-service.tsو./toolkit-server/src/protocol.tsعلى تنفيذ الهجمات وبروتوكول Fast Pair.
تتكون المنصة من مكوّنين: الخادم وواجهة المستخدم.
يجب تشغيل الخادم على نظام Linux، وقد تم اختباره مع Raspberry Pi 4.
واجهة المستخدم هي واجهة أمامية مبنية على Next.js ويمكن استخدامها للتحكم في الخادم، ويمكن تشغيلها في أي مكان يدعم Node.js.
يجب أن تكون واجهة المستخدم قادرة على الاتصال بالخادم عبر الشبكة.
اختبرنا المنصة مع Raspberry Pi OS Lite (64-bit) (6.12.47+rpt-rpi-v8)، وإصدار BlueZ 5.82.
جهاز يعمل بنظام Linux مع تثبيت BlueZ وNode.js وpnpm.
نوصي بشدة باستخدام إصدار الدعم طويل الأمد (LTS) الحالي من Node.js (v24.14.0).
لقد تأكدنا من أن المنصة تعمل باستخدام هذا الإصدار.
قد تعمل الإصدارات الأقدم حتى v18، لكنها على الأرجح سوف تتعطل أو تنتج نتائج غير متوقعة.
nvm.shإذا كنت تستخدم nvm لإدارة إصدارات Node.js المثبتة لديك، فيجب عليك التأكد من أن root لديه حق الوصول إلى إصدار Node.js المُدار عبر nvm أيضاً.
كما هو موضح في هذا المنشور على StackOverflow، قد تحتاج إلى إنشاء رابط رمزي جديد.
# Source - https://stackoverflow.com/a/40078875
# Posted by SimpleJ, modified by community. See post 'Timeline' for change history
# Retrieved 2026-03-30, License - CC BY-SA 4.0
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
[!NOTE] لتشغيل الخادم، تحتاج فقط إلى ربط
node.
إذا تم تثبيت Node.js أيضاً باستخدام مدير حزم خارجي، فقد يكون الإصدار المتاح لـ sudo مختلفاً عن الإصدار المستخدم من قبل nvm.
يمكنك التحقق من ذلك بمقارنة مخرجات node -v وsudo node -v.
في حين نوصي بـ Node.js LTS v24، يجب أن يكون الخادم قادراً على العمل بشكل صحيح حتى الإصدار v18.
pnpmإذا تم تثبيت Node.js v24 LTS، فيجب أن تتمكن من تفعيل pnpm باستخدام الأمر التالي:
corepack enable
تتطلب المنصة أيضاً hcitool وl2ping.
اعتماداً على توزيعة Linux لديك، قد لا يكون hcitool متاحاً. قد تحتاج إلى تثبيت bluez-deprecated-tools.
لا يزال مثبتاً مسبقاً على أحدث إصدار من Raspberry Pi OS Lite وقت كتابة هذا الدليل. (1 أكتوبر 2025)
إذا لم يكن محول Bluetooth قيد التشغيل، سيحاول الخادم استخدام rfkill لتشغيله.
يتطلب اختبار امتداد Audio Switch توفر rfcomm.
[!NOTE] سيتحقق الخادم من توفر هذه الأدوات عند بدء التشغيل. سيتم عرض معلومات إضافية حول الميزات التي قد لا تكون متاحة في وحدة التحكم.
تتطلب إعادة إنتاج النتائج وصولاً مادياً إلى جهاز قابل للاستغلال.
انتبه إلى أن معظم البائعين أصدروا تحديثات برمجية استجابةً لـ WhisperPair، لذلك قد تحتاج إلى أجهزة ذات برامج ثابتة قديمة.
انظر اختيار جهاز لمزيد من المعلومات حول الأجهزة التي استخدمناها في تقييمنا.
إذا كنت تريد تشغيل واجهة المستخدم والخادم على نفس الجهاز (Linux)، يمكنك استخدام السكربتين build.sh وstart.sh.
أولاً، ثبّت التبعيات المطلوبة وابنِ المكوّنات باستخدام:
bash build.sh
تأكد من تمكين Bluetooth:
sudo rfkill unblock bluetooth
ثم شغّل واجهة المستخدم والخادم باستخدام:
bash start.sh
يجب أن تكون واجهة المستخدم متاحة الآن على http://localhost:3000.
يمكنك تشغيل واجهة المستخدم والخادم على مضيفين مختلفين.
هذا يتيح لك تشغيل الخادم على جهاز Linux بينما تعمل واجهة المستخدم محلياً.
على الرغم من أن هذا غير موصى به، يمكنك القيام بذلك كما يلي:
toolkit-server متاح على جهاز Linuxtoolkit-server عن طريق تنفيذ bash build.sh.env في دليل toolkit-ui بحيث يتم تعيين متغير SERVER_URL على عنوان الخادم.
يمكنك تنفيذ bash update_server_url.sh <YOUR_URL> لتحديث ملف .env تلقائياً.toolkit-ui عن طريق تنفيذ bash build.shtoolkit-server عن طريق تنفيذ bash start.shtoolkit-ui عن طريق تنفيذ bash start.shيجب أن تكون واجهة المستخدم متاحة الآن على http://localhost:3000.
كبديل لاستخدام السكربتين build.sh وstart.sh، يمكنك أيضاً بناء الخادم وتشغيله يدوياً.
توجد تعليمات مفصلة حول كيفية تنفيذ هذه الخطوات في toolkit-server README