
A security research tool that identifies and demonstrates the CVE-2025-36911: Fast Pair Pairing Mode Bypass vulnerability
A deep dive into CVE-2025-36911 and the security gaps in Google's Fast Pair ecosystem
Google Fast Pair was designed to make Bluetooth pairing seamless: tap a notification and you're connected. But what happens when that seamless experience becomes a security liability? WhisperPair-PoC-Tool is a security research tool that exposes two critical vulnerability classes affecting millions of Bluetooth accessories: unauthorized pairing bypass and Find My Device Network tracking exploitation.
This post details the technical internals of WhisperPair-PoC-Tool, the protocol weaknesses it exploits, and what this means for the Bluetooth accessory ecosystem.
The Google Fast Pair specification explicitly states:
"If the optional Public Key field is present: If the device is not in pairing mode, ignore the write and exit."
This is the critical security gate. Devices should only respond to Key-Based Pairing requests when the user has explicitly put the device into pairing mode (typically by holding a button). This ensures user intent, so you can't pair with someone's earbuds while they're wearing them.
The Problem: Many manufacturers skip this check entirely. They process pairing requests regardless of pairing mode state, enabling:
Google's Find My Device Network (FMDN) allows tracking Bluetooth accessories via the crowd-sourced Android device network. This requires an Account Key, a 16-byte symmetric key linking the device to a Google account.
The Problem: The Account Key characteristic often accepts writes without authentication:
Before diving into the exploitation, let's understand the legitimate Fast Pair flow:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BLE Advertisement β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Service UUID: 0xFE2C (Fast Pair) β
β Service Data: β
β [Pairing Mode] β 3 bytes: Model ID only β
β [Not Pairing] β 4+ bytes: 0x00 + Account Key Filter β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The advertisement format reveals pairing state:
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 βββββββββββ>β
The vulnerability occurs when devices skip the "SECURITY CHECK" box entirely.
WhisperPair-PoC-Tool is a Python-based security research tool built on top of the Bleak BLE library. It operates in several phases:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
discovery.py)The scanner uses Bleak's detection callbacks to capture BLE advertisements: