
Инструмент для исследований в области безопасности, который выявляет и демонстрирует уязвимость CVE-2025-36911: обход режима быстрой пары (Fast Pair)
Глубокое погружение в CVE-2025-36911 и пробелы безопасности в экосистеме Google Fast Pair
Google Fast Pair был разработан, чтобы сделать сопряжение по Bluetooth бесшовным: нажал на уведомление — и ты подключён. Но что происходит, когда этот бесшовный опыт становится угрозой безопасности? WhisperPair-PoC-Tool — это инструмент для исследования безопасности, который выявляет два критических класса уязвимостей, затрагивающих миллионы Bluetooth-аксессуаров: обход несанкционированного сопряжения и эксплуатация сети Find My Device.
В этом посте описываются технические детали WhisperPair-PoC-Tool, слабые места протокола, которые он эксплуатирует, и что это значит для экосистемы Bluetooth-аксессуаров.
Спецификация Google Fast Pair явно указывает:
"Если присутствует необязательное поле Public Key: если устройство не находится в режиме сопряжения, игнорируйте запись и выйдите."
Это критический защитный шлюз. Устройства должны только отвечать на запросы Key-Based Pairing, когда пользователь явно перевёл устройство в режим сопряжения (обычно удержанием кнопки). Это обеспечивает намерение пользователя, чтобы нельзя было подключиться к чьим-то наушникам, пока они надеты.
Проблема: Многие производители полностью пропускают эту проверку. Они обрабатывают запросы на сопряжение независимо от состояния режима сопряжения, что позволяет:
Сеть Find My Device Network (FMDN) от Google позволяет отслеживать Bluetooth-аксессуары через краудсорсинговую сеть Android-устройств. Для этого требуется Account Key — 16-байтовый симметричный ключ, связывающий устройство с учётной записью Google.
Проблема: Характеристика Account Key часто принимает записи без аутентификации:
Прежде чем углубляться в эксплуатацию, давайте разберёмся с легитимным потоком Fast Pair:
┌─────────────────────────────────────────────────────────────┐
│ BLE Advertisement │
├─────────────────────────────────────────────────────────────┤
│ Service UUID: 0xFE2C (Fast Pair) │
│ Service Data: │
│ [Pairing Mode] → 3 bytes: Model ID only │
│ [Not Pairing] → 4+ bytes: 0x00 + Account Key Filter │
└─────────────────────────────────────────────────────────────┘
Формат рекламного объявления раскрывает состояние сопряжения:
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 ═══════════>│
Уязвимость возникает, когда устройства полностью пропускают блок "SECURITY CHECK".
WhisperPair-PoC-Tool — это инструмент для исследования безопасности на Python, построенный на основе BLE-библиотеки Bleak. Он работает в несколько этапов:
┌────────────────────────────────────────────────────────────────┐
│ 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) │
└────────────────────────────────────────────────────────────────┘