POC for CVE-2025-36911 WhisperPair vulnerability, allowing you to connect to supported devices with no authentication info.
This firmware only performs discovery and vulnerability confirmation and does not implement complete audio listening.
Output on during tests:
- Testing Mac: will use the ESP's own Mac and the Mac of the device you are testing to attempt to pair.
- See if device exposes key if you ask nicely: Expose Key via Read; Broadcast Key in Ads.
- Accept wrong key: try to send a random security key.
Tested on Device: Freenove ESP32-S3 ESP32 S3 Display CYD 2.8 Inch IPS Capacitive Touch Screen 240x320 Pixel
You can use ESP32 device to track down devices that support Fast Pair and check vulneravility.
Interested in penetration testing and security devices? Visit
The scanner (BleManager) bypasses standard discovery to parse raw advertisement packets for GFPS payloads
- Fast Pair: Service UUID
0xFE2C. - Nearby: Service UUID
0xFEF3. - Model ID Extraction: Parses the 3-byte Model ID from Service Data to track devices across MAC address rotations.
To handle privacy-enabled BLE devices that rotate MAC addresses, the system uses a tiered identity check
- MAC Match: Checks strict raw address equality.
- Identity Match: If MAC differs, correlates via
Model IDorDevice Name. - Hot-Swap: Updates the stored MAC address in real-time when a known identity broadcasts from a new address, preventing connection failures during tests.
The testDevice function executes a raw GFPS handshake to test for unauthorized pairing acceptance
- Connection: Establishes GATT connection with an 8-second timeout.
- Service Resolution: Locates Fast Pair Service (
0xFE2C) and KBP Characteristic (fe2c1234-8366-4814-8eb0-01de32100bea). - Payload Construction:
- Generates a 16-byte block:
[Type: 0x00] [Flags: 0x11] [Provider Address] [Salt: 8 bytes]. - Encryption: Encrypts the block using
mbedtls_aes_crypt_ecbwith the Salt as the key.
- Generates a 16-byte block:
- Verification:
- Writes the encrypted packet to the KBP characteristic.
- Listens for a Notification response.
- Vulnerable: Device sends a notification (accepting the handshake).
- Safe: Device remains silent or disconnects.
Designed for ESP32 with FT6336U touch and TFT_eSPI displays .
| Function | Pin |
|---|---|
| Touch SDA | 16 |
| Touch SCL | 15 |
| Touch RST | 18 |
| Touch INT | 17 |
- Dependencies:
NimBLE-Arduino(2.3.7)TFT_eSPI(Display)FT6336U(Input)
- Partition Scheme: Select "Huge APP (3MB No OTA)" to accommodate the BLE stack.
- TFT Setup: Configure
User_Setup.hin theTFT_eSPIlibrary to match the ILI9341/ST7789 driver for your specific board.
or download libraries from Freenove and place it into your Arduino Library folder
https://codeload.github.com/Freenove/Freenove_ESP32_S3_Display/zip/refs/heads/main
- Scanning: Toggle
SCANto populate the list. - Targeting: Tap an entry to initiate the WhisperPair test.

