
التنفيذ المرجعي الرسمي والتحقق من الثغرة الأمنية لهجومنا 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
كبديل لاستخدام السكربتين build.sh وstart.sh، يمكنك أيضاً بناء واجهة المستخدم وتشغيلها يدوياً.
توجد تعليمات مفصلة حول كيفية تنفيذ هذه الخطوات في toolkit-ui README
تحتاج إلى ملحق متوافق مع Fast Pair لتنفيذ الهجمات واستخدام المنصة.
قمنا بتقييم 25 جهازاً من 16 بائعاً، كما هو موضح في الجدول أدناه.
إذا كان لديك أحد هذه الأجهزة، ولم يتم تحديث برنامجه الثابت منذ سبتمبر 2025، فيمكنك إعادة إنتاج نتائجنا.
يمكنك أيضاً استخدام المنصة لتقييم جهاز لم نختبره.
ومع ذلك، قد تواجه بعض الأخطاء غير المتوقعة اعتماداً على موثوقية شريحة Bluetooth في الجهاز المستهدف.
عند تنفيذ الهجمات، تأكد من معرفة ما إذا كان الجهاز المستهدف في وضع الاقتران أم لا.
تتطلب بعض الهجمات ألا يكون الجهاز في وضع الاقتران، وقد تنتج نتائج إيجابية خاطئة بخلاف ذلك.
تتطلب هجمات أخرى أن يكون الجهاز في وضع الاقتران، وقد لا تعمل بخلاف ذلك.
إذا كنت تبحث عن أجهزة متوافقة مع Fast Pair، يمكنك استخدام قائمة معرّفات الطراز لعرض جميع الأجهزة المعتمدة من Fast Pair.
Model not included in test setستعرض واجهة المستخدم رسالة تحذير إذا قمت بتحديد جهاز غير مدرج في مجموعة الاختبار الخاصة بنا.
تظهر هذه الرسالة بناءً على Model ID، الذي قد يختلف بين الألوان والمناطق المختلفة لنفس الجهاز.
على سبيل المثال، تستخدم سماعات رأس زرقاء من Sony WH-1000XM6 معرّف طراز مختلفاً عن سماعات رأس سوداء من Sony WH-1000XM6.
نظراً لأنه من المرجح أن تحتوي هذه الأجهزة على نفس البرنامج الثابت (حتى وإن كانت معرّفات الطراز مختلفة)، يمكنك تجاهل رسالة التحذير هذه بأمان.
No device with Model ID <number> was foundنظراً لتشديد الحد من المعدل (rate limiting) المفروض من قبل Fast Pair gRPC API، قد تعيد بعض طلبات بيانات الطراز استجابات ناجحة بمحتوى فارغ.
سيؤدي ذلك إلى ظهور الرسالة No device with Model ID <number> was found في واجهة المستخدم.
إذا كنت متأكداً من أن Model ID الذي أدخلته موجود، فيرجى الانتظار بضع دقائق وإعادة المحاولة.
[!NOTE] بيانات الطراز للأجهزة في مجموعة الاختبار الخاصة بنا مضمنة في هذا المستودع وستتم قراءتها من ذاكرة تخزين مؤقت. لا يتطلب تقييم هذه الأجهزة استدعاء API لخدمة gRPC. لاحظ أن أجهزة نفس السلسلة قد لا تحتوي على نفس معرّفات الطراز. انظر رسالة تحذير Model not included in test set لمزيد من المعلومات.

ستحاول واجهة المستخدم الاتصال بالخادم عند بدء التشغيل.
عند نجاح الاتصال، ستظهر رسالة "Connected to the server" في الزاوية السفلية اليمنى من الشاشة.
يتطلب تقييم ما إذا كان الجهاز عرضة للثغرات ثلاث خطوات: اكتشاف الجهاز، وتعيين Model ID الخاص به، وتنفيذ هجوم.
تقوم المنصة بفحص مستمر لأجهزة Bluetooth Low Energy، وتُعرض هذه الأجهزة على الجانب الأيسر من الشاشة.
تظهر الأجهزة التي تعلن عن بيانات Fast Pair في الأعلى.
تظهر تفاصيل الجهاز على الجانب الأيمن من الشاشة بعد النقر على "Select" في أحد الأجهزة.
يتطلب تشغيل الاختبارات الموضحة في الورقة تعيين Model ID للجهاز.
إذا كان الجهاز يعرض خاصية GATT الخاصة بـ Fast Pair، فسيظهر زر "Read Model ID" في تفاصيل الجهاز.
سيؤدي النقر على هذا الزر إلى محاولة قراءة Model ID.
لاحظ أن العديد من الأجهزة لا تطبّق هذه الخاصية بشكل صحيح، وتعيد معرّفات طراز غير صالحة.
بدلاً من ذلك، يمكنك تعيين Model ID للجهاز يدوياً بالضغط على زر "Set Model ID" وإدخال قيمة يدوياً.
يمكن تحديد الأجهزة التي تم تقييمها أثناء اختباراتنا، أو إدخال قيمة مخصصة.
توجد قائمة كاملة بالأجهزة المتوافقة مع Fast Pair في جذر هذا المستودع.
بمجرد تعيين Model ID، ستظهر بيانات وصفية حول الجهاز في تفاصيل الجهاز.
لتنفيذ هجوم، انقر على زر "Attack" في جزء تفاصيل الجهاز.
هناك ثلاثة هجمات مطبّقة: فرض مسند حالة الاقتران، وإعادة استخدام nonce، وهجوم المنحنى غير الصالح.
إذا كنت متصلاً بالفعل بجهاز، فإن تحديد خانة "Reconnect" سيفصل الجهاز ويعيد الاتصال به قبل تنفيذ الهجوم.
يوفر فحص فرض مسند حالة الاقتران بعض خيارات التهيئة الإضافية:
أثناء تنفيذ الهجوم، ستظهر السجلات في الوقت الفعلي في واجهة المستخدم.
بعد اكتمال الهجوم، سيتم عرض مدته.
في بعض الأحيان، قد يستغرق الهجوم أو الاقتران وقتاً أطول من المتوقع.
يمكنك إلغاء هجوم أو اقتران بالنقر على زر "Cancel" في مربع الحوار المقابل.
إذا قمت بإعادة تحميل واجهة المستخدم أثناء هجوم أو اقتران، يمكنك استخدام مدير المهام للإلغاء بدلاً من ذلك.
في الجانب العلوي الأيمن من الشاشة، سيعرض الزر الثاني من اليمين حالة المهام.
إذا لم تكن هناك مهام نشطة، فسيظهر "No active tasks".
وبخلاف ذلك، سيعرض "Task in progress".
لإلغاء مهمة، انقر على زر "Task in progress"، ثم اضغط على زر "Cancel".
إذا علّق الخادم بسبب مهمة معلّقة لا يمكن إلغاؤها، جرّب إعادة تعيين محول Bluetooth.
[!NOTE] قد يستغرق إلغاء المهام حتى 20 ثانية.
في بعض الحالات، قد يعلق محول Bluetooth في "حالة سيئة".
أسهل حل لهذه المشكلة هو إعادة تعيين محول Bluetooth.
لإجراء إعادة التعيين، افتح قائمة استكشاف الأخطاء وإصلاحها بالضغط على أيقونة مفتاح الربط في الجانب العلوي الأيمن من الشاشة.
ثم حدد "Reset BLE adapter" وأكد إعادة التعيين بالنقر على "Reset" في مربع الحوار.
إذا حدث خطأ فادح واضطر الخادم إلى الإغلاق، فسيقوم السكربت start.sh تلقائياً بإعادة تشغيل الخادم.
في السيناريوهات التي يوجد فيها الكثير من أجهزة BLE القريبة، قد يغلق الخادم بشكل غير متوقع بسبب خطأ في D-Bus.
يحدث هذا نادراً جداً، ويجب أن يقوم السكربت ./start.sh تلقائياً بإعادة تشغيل الخادم إذا حدث ذلك.
إذا كنت تبحث عن أجهزة متوافقة مع Fast Pair، يمكنك استخدام قائمة معرّفات الطراز لعرض جميع الأجهزة المعتمدة من Fast Pair.
تم دعم هذا العمل من قبل الحكومة الفلمنكية من خلال برنامج أبحاث الأمن السيبراني بمنحة رقم VOEWICS02.
| الشركة المصنعة | اسم الجهاز | Model ID | عرضة للاختطاف | الوقت حتى الاختطاف (ثانية) | عرضة لإعادة استخدام nonce | عرضة لهجوم المنحنى غير الصالح |
|---|
| Apple | Beats Solo Buds | 6980580 | لا | نعم | لا | |
| Pixel Buds Pro 2 | 12934265 | نعم | 6.89 | لا | لا | |
| Jabra | Elite 8 Active | 3778746 | نعم | 32.01 | لا | لا |
| JBL | Tune Beam | 3293323 | نعم | 6.91 | فقط في نفس الجلسة | لا |
| Marshall | MOTIF II A.N.C. | 15473012 | نعم | 9.49 | نعم | لا |
| Nothing | Ear (a) | 8625818 | نعم | 38.80 | فقط في نفس الجلسة | لا |
| OnePlus | Nord Buds Pro 3 | 13394952 | نعم | 10.19 | فقط في نفس الجلسة | لا |
| HP | Poly VFree 60 | 15984097 | لا | لا | لا | |
| Redmi | Buds 5 Pro | 11155060 | نعم | 8.32 | فقط في نفس الجلسة | لا |
| Soundcore | Liberty 4 NC | 5409858 | نعم | 15.27 | نعم | لا |
| Sony | WF-1000XM5 | 12499626 | نعم | 9.43 | نعم | لا |
| Audio-Technica | ATH-M20xBT | 13285048 | لا | فقط في نفس الجلسة | لا | |
| Bose | QuietComfort Ultra | 5723549 | لا | لا | لا | |
| JBL | Live 775 NC | 14502233 | نعم | 7.62 | فقط في نفس الجلسة | لا |
| Marshall | Major V | 12915160 | نعم | 11.70 | فقط في نفس الجلسة | لا |
| Sonos | Ace V | 7340495 | لا | لا | لا | |
| Sony | WH-1000XM4 | 13386638 | نعم | 9.69 | نعم | لا |
| Sony | WH-1000XM5 | 13911719 | نعم | 12.38 | نعم | لا |
| Sony | WH-1000XM6 | 6360443 | نعم | 12.94 | فقط في نفس الجلسة | لا |
| Sony | WH-CH720N | 16003068 | نعم | 7.46 | نعم | لا |
| Bang & Olufsen | Beosound A1 | 2431472 | لا | لا | لا | |
| Jabra | Speak2 55 UC | 9888885 | لا | لا | لا | |
| JBL | Clip 5 | 1917389 | نعم | 36.19 | نعم | لا |
| JBL | Flip 6 | 7278954 | لا | لا | لا | |
| Logitech | Wonderboom 4 | 11575855 | نعم | 11.96 | فقط في نفس الجلسة | لا |