Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
whisperpair-poc-tool — أداة بحث أمنية تحدد وتوضح ثغرة CVE-2025-36911: Fast Pair Pairing Mode Bypass | Kitploit
أدوات/GitHubGitHub/aalex954/whisperpair-poc-tool
الاستطلاعأمن البلوتوثتحليل الثغرات الأمنيةالاستغلالجمع المعلوماتأمن الشبكات اللاسلكيةاختبار الاختراقأمن الأجهزةالفريق الأحمر
GitHubaalex954/whisperpair-poc-tool

whisperpair-poc-tool

أداة بحث أمنية تحدد وتوضح ثغرة CVE-2025-36911: Fast Pair Pairing Mode Bypass

73منذ 7 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع

أداة وأبحاث WhisperPair-PoC

غوص عميق في CVE-2025-36911 والفجوات الأمنية في نظام Fast Pair من Google

مقال المدونة

demo

الملخص التنفيذي

صُمم Google Fast Pair لجعل الإقران عبر Bluetooth سلسًا: انقر على إشعار وستتصل. ولكن ماذا يحدث عندما تصبح هذه التجربة السلسة مسؤولية أمنية؟ WhisperPair-PoC-Tool هي أداة بحث أمني تكشف عن فئتين حرجتين من الثغرات تؤثران على ملايين ملحقات Bluetooth: تجاوز الإقران غير المصرح به واستغلال شبكة العثور على جهازي (Find My Device Network).

توضح هذه التدوينة التفاصيل الفنية الداخلية للأداة WhisperPair-PoC-Tool، ونقاط الضعف في البروتوكول التي تستغلها، وما يعنيه ذلك لنظام ملحقات Bluetooth.


جدول المحتويات

  1. الثغرات
  2. مقدمة عن بروتوكول Fast Pair
  3. كيف تعمل الأداة WhisperPair-PoC-Tool
  4. سطح الهجوم
  5. منهجية الكشف
  6. قدرات الاستغلال
  7. إرشادات المعالجة
  8. الاعتبارات الأخلاقية

الثغرات

CVE-2025-36911: تجاوز وضع الإقران في Fast Pair

تنص مواصفات Google Fast Pair صراحةً على:

"إذا كان حقل المفتاح العام الاختياري موجودًا: إذا لم يكن الجهاز في وضع الإقران، فتجاهل الكتابة واخرج."

  • مواصفات إجراءات GATT الخاصة بـ Google Fast Pair

هذه هي البوابة الأمنية الحرجة. يجب أن تستجيب الأجهزة فقط لطلبات الإقران القائمة على المفتاح عندما يضع المستخدم الجهاز صراحةً في وضع الإقران (عادةً بالضغط على زر). وهذا يضمن نية المستخدم، فلا يمكنك الإقران مع سماعات شخص ما أثناء ارتدائها.

المشكلة: يتجاهل العديد من المصنعين هذا الفحص بالكامل. فهم يعالجون طلبات الإقران بغض النظر عن حالة وضع الإقران، مما يتيح:

  • إقران صامت دون تفاعل المستخدم
  • اختطاف الملحق في هجمات القرب
  • انتهاكات الخصوصية بالاتصال بأجهزة الضحايا

كشف مفتاح حساب Find Hub

تسمح شبكة العثور على جهازي (FMDN) من Google بتتبع ملحقات Bluetooth عبر شبكة أجهزة Android الجماعية. وهذا يتطلب مفتاح حساب، وهو مفتاح متماثل بطول 16 بايت يربط الجهاز بحساب Google.

المشكلة: غالبًا ما تقبل خاصية مفتاح الحساب عمليات الكتابة دون مصادقة:

  • يمكن للمهاجم استبدال مفتاح حساب موجود
  • ينقطع تكامل العثور على جهازي للضحية
  • يمكن للمهاجم تتبع الجهاز باستخدام مفتاحه الخاص
  • يستمر هذا حتى إعادة الضبط إلى إعدادات المصنع

مقدمة عن بروتوكول Fast Pair

قبل الخوض في الاستغلال، دعنا نفهم تدفق Fast Pair الشرعي:

مرحلة الإعلان

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                    BLE Advertisement                         │
├─────────────────────────────────────────────────────────────┤
│  Service UUID: 0xFE2C (Fast Pair)                           │
│  Service Data:                                               │
│    [Pairing Mode]   → 3 bytes: Model ID only                │
│    [Not Pairing]    → 4+ bytes: 0x00 + Account Key Filter   │
└─────────────────────────────────────────────────────────────┘

يكشف تنسيق الإعلان عن حالة الإقران:

  • 3 بايتات = Model ID فقط = الجهاز قابل للاكتشاف (وضع الإقران)
  • 4+ بايتات = بايت الإصدار + بيانات مفتاح الحساب = ليس في وضع الإقران

المصافحة القائمة على المفتاح

root@kitploit:~
Seeker (Phone)                              Provider (Accessory)
      │                                              │
      │───── GATT Connect ──────────────────────────>│
      │                                              │
      │───── Discover Services ─────────────────────>│
      │<──── Service: 0xFE2C ────────────────────────│
      │                                              │
      │───── Enable Notifications (0xFE2C1234) ─────>│
      │                                              │
      │───── Write Key-Based Pairing Request ───────>│
      │      [16-byte encrypted block]               │
      │      [64-byte ECDH Public Key] (optional)    │
      │                                              │
      │      ┌────────────────────────────────────┐  │
      │      │ SECURITY CHECK:                    │  │
      │      │ If Public Key present AND          │  │
      │      │ device NOT in pairing mode:        │  │
      │      │   → IGNORE and EXIT                │  │
      │      │ Else:                              │  │
      │      │   → Process request                │  │
      │      └────────────────────────────────────┘  │
      │                                              │
      │<──── Notification: Encrypted Response ───────│
      │      [Provider's BR/EDR Address]             │
      │                                              │
      │═══════ Bluetooth Classic Pairing ═══════════>│

تحدث الثغرة عندما تتخطى الأجهزة مربع "الفحص الأمني" بالكامل.


كيف تعمل الأداة WhisperPair-PoC-Tool

WhisperPair-PoC-Tool هي أداة بحث أمني مبنية بلغة Python على مكتبة Bleak BLE. تعمل بعدة مراحل:

نظرة عامة على البنية

root@kitploit:~
┌────────────────────────────────────────────────────────────────┐
│                        WhisperPair-PoC-Tool                          │
├────────────────────────────────────────────────────────────────┤
│  CLI Layer                                                      │
│  ├── Argument parsing (--target-name, --scan-duration)         │
│  ├── TargetPolicy construction                                  │
│  └── REPL initialization                                        │
├────────────────────────────────────────────────────────────────┤
│  Discovery Engine                                               │
│  ├── BLE scanning via Bleak                                    │
│  ├── Advertisement parsing                                      │
│  ├── Protocol detection (Fast Pair, FMDN, Swift Pair)          │
│  └── Device fingerprinting (Model ID, OUI lookup)              │
├────────────────────────────────────────────────────────────────┤
│  Check Engines                                                  │
│  ├── FastPairCheckEngine (passive advertisement analysis)      │
│  ├── FastPairBypass (active CVE-2025-36911 testing)           │
│  ├── FindHubCheckEngine (Account Key status detection)         │
│  └── RiskScorer (composite vulnerability assessment)           │
├────────────────────────────────────────────────────────────────┤
│  Connection Manager                                             │
│  ├── GATT connect with MTU negotiation                         │
│  ├── Service/characteristic discovery                          │
│  ├── Read/Write/Notify operations                              │
│  └── Error handling and retry logic                            │
├────────────────────────────────────────────────────────────────┤
│  Exploitation Modules                                           │
│  ├── ring_device() - Trigger locator sound                     │
│  ├── set_account_key() - Write Account Key                     │
│  └── Response parsing (BR/EDR address extraction)              │
└────────────────────────────────────────────────────────────────┘

المكونات الأساسية

1. محرك الاكتشاف (discovery.py)

يستخدم الماسح دوال الاسترجاع الخاصة بـ Bleak لالتقاط إعلانات BLE:

root@kitploit:~
async def _detection_callback(
    self, device: BLEDevice, advertisement_data: AdvertisementData
) -> None:
    """Process each detected BLE advertisement."""
    discovered = DiscoveredDevice(
        address=device.address,
        name=device.name or advertisement_data.local_name,
        rssi=advertisement_data.rssi,
        advertisement=self._convert_advertisement(advertisement_data),
        first_seen=datetime.now(UTC),
        last_seen=datetime.now(UTC),
    )
    self._devices[device.address] = discovered

لكل جهاز، تستخرج الأداة:

  • معرّفات UUID للخدمة (اكتشاف Fast Pair 0xFE2C، FMDN 0xFD44، إلخ)
  • بيانات الشركة المصنعة (Google 0x00E0، Apple 0x004C)
  • بيانات الخدمة (تحليلها لاستخراج Model ID وحالة الإقران)

2. استنتاج وضع الإقران (fastpair.py)

يتم تحديد وضع الإقران بتحليل إعلان الجهاز:

root@kitploit:~
def _analyze_service_data(self, evidence: FastPairEvidence) -> None:
    """Analyze Fast Pair service data to infer pairing mode."""
    data = evidence.service_data_bytes
    
    # 3 bytes = Model ID only = Pairing Mode (discoverable)
    if len(data) == 3:
        evidence.inferred_pairing_mode = PairingModeState.IN_PAIRING_MODE
        return
    
    # 4+ bytes with version 0x00 = Not in pairing mode
    if data[0] == 0x00:
        akd_byte = data[1]
        akd_type = akd_byte & 0x0F  # Lower 4 bits
        # Type 0x00 = Show UI, Type 0x02 = Hide UI
        # Both indicate NOT in pairing mode
        evidence.inferred_pairing_mode = PairingModeState.NOT_IN_PAIRING_MODE

هذا أمر حاسم: إذا تم تحديد أن الجهاز ليس في وضع الإقران، ومع ذلك استمر في الاستجابة لطلب الإقران، فهو ضعيف.

3. كشف الثغرة (fastpair_attack.py)

يرسل اختبار الثغرة الأساسي طلبات إقران قائمة على المفتاح ويراقب الاستجابات:

root@kitploit:~
async def check_vulnerability(self, device: DiscoveredDevice) -> BypassCheckResult:
    """Test if device responds to pairing requests when not in pairing mode."""
    
    # Enable notifications to receive response
    await self.connection_manager.start_notify(
        KEY_BASED_PAIRING_CHAR,
        self._notification_handler,
    )
    
    # Build and send request (multiple strategies)
    for strategy in self.strategies:
        request, flags = self._build_strategy_request(device.address, strategy)
        await self.connection_manager.write_characteristic(
            KEY_BASED_PAIRING_CHAR,
            request,
        )
        
        # Wait for response
        try:
            await asyncio.wait_for(
                self._response_received.wait(),
                timeout=self.response_timeout,
            )
            # Response received = VULNERABLE
            return BypassCheckResult(result=BypassResult.VULNERABLE, ...)
        except asyncio.TimeoutError:
            # No response = Device correctly ignored request
            continue
    
    return BypassCheckResult(result=BypassResult.NOT_VULNERABLE, ...)

تنفذ الأداة استراتيجيات طلبات متعددة لأن الأجهزة المختلفة تستجيب لمجموعات أعلام مختلفة:

4. تحليل الاستجابة

عندما يستجيب جهاز ضعيف، تستخرج الأداة عنوان BR/EDR (Bluetooth Classic):

root@kitploit:~
def _parse_response(self, response_data: bytes) -> str | None:
    """Extract provider's BR/EDR address from response."""
    
    # Strategy 1: Standard response (type 0x01)
    if response_data[0] == 0x01:
        return self._extract_address(response_data, offset=1)
    
    # Strategy 2: Extended response (type 0x02)
    if response_data[0] == 0x02:
        addr_count = response_data[2]
        return self._extract_address(response_data, offset=3)
    
    # Strategy 3: Brute force pattern matching
    for offset in range(len(response_data) - 5):
        addr = self._extract_address(response_data, offset)
        if self._is_valid_mac(addr):
            return addr

يمكن استخدام عنوان BR/EDR هذا لبدء إقران Bluetooth Classic (على الرغم من أن الأداة تتوقف عند الكشف).


سطح الهجوم

ما الذي يجعل الأجهزة ضعيفة؟

حدد البحث حالات فشل تنفيذ شائعة:

1. عدم فحص وضع الإقران

المشكلة الأكثر شيوعًا: المصنعون ببساطة لا ينفذون هذا الفحص:

root@kitploit:~
// VULNERABLE: No pairing mode check
void handle_kbp_write(uint8_t* data, size_t len) {
    if (len >= 80 && has_public_key(data)) {
        // Should check: if (!is_in_pairing_mode()) return;
        process_pairing_request(data);  // Processes regardless
    }
}

2. كتابات غير محمية لمفتاح الحساب

يجب أن تتطلب خاصية مفتاح الحساب مصادقة:

root@kitploit:~
// VULNERABLE: No authentication required
void handle_account_key_write(uint8_t* key, size_t len) {
    if (len == 16) {
        store_account_key(key);  // Accepts any key from anyone
    }
}

// SECURE: Verify caller knows existing key
void handle_account_key_write_secure(uint8_t* encrypted_key, size_t len) {
    if (!verify_encrypted_with_existing_key(encrypted_key)) {
        return;  // Reject unauthorized writes
    }
    store_account_key(decrypt(encrypted_key));
}

3. تسريب الإعلان

الأجهزة التي تعلن عن بيانات خدمة Fast Pair عندما تكون ليس في وضع الإقران تكشف عن:

  • أنها تدعم Fast Pair (تحديد سطح الهجوم)
  • مرشح مفتاح الحساب (يمكن استخدامه لبصمة الجهاز)
  • ربما Model ID الخاص بها (يحدد طراز الجهاز بدقة)

منهجية الكشف

تستخدم الأداة منهج اكتشاف متعدد الطبقات:

الطبقة 1: تحليل الإعلان السلبي

لا يتطلب اتصالاً. تحلل الأداة ما يبثه الجهاز:

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│  الفحوصات السلبية                                            │
├─────────────────────────────────────────────────────────────┤
│  ✓ وجود معرّف خدمة Fast Pair (0xFE2C)                      │
│  ✓ وجود معرّف خدمة FMDN (0xFD44)                           │
│  ✓ استنتاج وضع الإقران من طول بيانات الخدمة                │
│  ✓ استخراج Model ID (عندما يكون في وضع الإقران)            │
│  ✓ اكتشاف مرشح مفتاح الحساب (عندما لا يكون في وضع الإقران) │
│  ✓ تحليل نوع العنوان (ثابت مقابل عشوائي)                    │
└─────────────────────────────────────────────────────────────┘

النتيجة: "جهاز يعلن عن بيانات Fast Pair بينما ليس في وضع الإقران"
        → انتهاك محتمل للبوابة (يحتاج اختبار نشط للتأكيد)

الطبقة 2: الاستقصاء النشط لـ GATT

يتطلب اتصالاً. تتفاعل الأداة مع خدمات GATT:

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│  الفحوصات النشطة                                             │
├─────────────────────────────────────────────────────────────┤
│  1. الاتصال بالجهاز عبر BLE                                 │
│  2. اكتشاف خدمة Fast Pair (0xFE2C)                         │
│  3. تحديد خاصية الإقران القائم على المفتاح (0xFE2C1234)    │
│  4. تفعيل الإشعارات                                          │
│  5. كتابة طلب الإقران القائم على المفتاح                   │
│  6. انتظار الاستجابة (مع مهلة)                              │
│  7. استقبال استجابة → ضعيف                                  │
│     مهلة/رفض → ليس ضعيفًا                                    │
└─────────────────────────────────────────────────────────────┘

الطبقة 3: تسجيل المخاطر

يتم حساب درجة مخاطر مركبة:

مستويات المخاطر:

  • منخفض (≤0): لم يتم اكتشاف مشكلات كبيرة
  • متوسط (1-2): بعض الإشارات المقلقة
  • مرتفع (≥3): تأكيد ثغرات متعددة

قدرات الاستغلال

تتضمن الأداة ميزات استغلال خاضعة للتحكم لإظهار التأثير:

1. رنين الجهاز (أمر ring)

يُشغّل خاصية إجراءات منارة FMDN لتشغيل صوت الموقع:

محذوف للإصدار

التأثير: يمكن للمهاجم مضايقة الضحية بتكرار تشغيل الصوت، أو استخدامه لتحديد موقع جهاز يريد سرقته.

2. التلاعب بمفتاح الحساب (أمر set account-key)

يكتب مفتاح حساب جديدًا إلى الجهاز:

محذوف للإصدار

التأثير:

  • يعطل تكامل Find My Device للضحية
  • يمكن للمهاجم تتبع الجهاز باستخدام مفتاحه المعروف
  • لا يمكن استرداده إلا عبر إعادة الضبط إلى إعدادات المصنع

ما لم يتم تنفيذه

تتوقف الأداة عمدًا قبل الاستغلال الكامل:


إرشادات المعالجة

لمصنعي الأجهزة

  1. تنفيذ فحص وضع الإقران:
root@kitploit:~
if (has_public_key(request) && !is_in_pairing_mode()) {
    return;  // تجاهل الطلب حسب المواصفات
}
  1. اشتراط المصادقة على كتابات مفتاح الحساب:

    • تشفير المفتاح الجديد بالمفتاح الحالي
    • التحقق قبل التخزين
  2. تقليل التعرض للإعلان:

    • الإعلان عن معرف Fast Pair فقط عند وجود وضع الإقران
    • استخدام العناوين الدوارة عند الإمكان
  3. آلية تحديث البرامج الثابتة:

    • دفع الإصلاحات للأجهزة المتأثرة في الميدان

للمستخدمين النهائيين

  1. حافظ على تحديث البرامج الثابتة لملحقات Bluetooth
  2. أعد الضبط إلى إعدادات المصنع إذا اشتبهت في اختراق
  3. كن حذرًا مع الأجهزة التي تقترن تلقائيًا دون الضغط على زر
  4. افحص إعدادات Find My Device بشكل دوري

الاستخدام المقصود

هذه الأداة مخصصة لما يلي:

  • ✅ الباحثون الأمنيون الذين يقيمون تطبيقات الملحقات
  • ✅ مهندسو ضمان الجودة الذين يختبرون منتجات شركاتهم
  • ✅ مالكو الأجهزة الذين يفحصون ملحقاتهم الخاصة
  • ❌ ليس للوصول غير المصرح به إلى أجهزة الآخرين

الخاتمة

توضح الأداة أن تجربة Fast Pair "السلسة" تأتي بمقايضات أمنية يفشل العديد من المصنعين في معالجتها. فحص وضع الإقران هو شرط واحد يفصل بين جهاز آمن وجهاز ضعيف، ومع ذلك يتم حذفه بشكل متكرر.

يفترض نموذج الثقة في Fast Pair أن الأجهزة ستفرض نية المستخدم. عندما لا تفعل، يحصل المهاجمون على إقران صامت، وقدرات تتبع، ونواقل حرمان من الخدمة ضد أجهزة الضحايا.

تهدف هذه الأداة إلى مساعدة النظام البيئي في تحديد هذه المشكلات ومعالجتها، مما يجعل ملحقات Bluetooth أكثر أمانًا للجميع.


المراجع

  • البحث الأصلي لـ WhisperPair
  • مواصفات Google Fast Pair
  • CVE-2025-36911
  • بروتوكول شبكة Find My Device
  • مواصفات Bluetooth الأساسية
  • مكتبة Bleak BLE

تم إصدار WhisperPair-PoC-Tool لأغراض البحث الأمني المصرح به فقط. لا تتحمل أي مسؤولية عن سوء استخدام هذه الأداة.

تنزيل الأداة
الاستراتيجيةالأعلامالوصف
RAW_KBP0x11INITIATE_BONDING | EXTENDED_RESPONSE
WITH_PUBLIC_KEY0x11طلب بطول 80 بايت مع مفتاح عام ECDH
RETROACTIVE0x0Aيتجاوز بعض فحوصات المصنعين
EXTENDED0x10للبرامج الثابتة الأحدث للأجهزة
الإشارةالدرجةالمعنى
انتهاك البوابة (سلبي)+2الإعلان عن FP عندما لا يكون في وضع الإقران
تأكيد التجاوز (نشط)+2استجابة لـ KBP عندما لا يكون في وضع الإقران
FMDN بدون مفتاح حساب+2قابل للتتبع عبر شبكة Find My
عنوان BLE ثابت+1الجهاز قابل للتتبع بشكل دائم
ملاحظة تدوير العنوان-1سلوك يحافظ على الخصوصية
القدرةتم التنفيذالسبب
كشف الثغرة✅ نعمالغرض الأساسي
استخراج عنوان BR/EDR✅ نعمجمع الأدلة
إقران Bluetooth Classic❌ لايتطلب كودًا خاصًا بالمنصة
اختطاف صوت HFP❌ لاخارج نطاق أداة BLE
زراعة دائمة❌ لاقدرة خبيثة