
La implementación de referencia oficial y verificación de vulnerabilidad de nuestro ataque WhisperPair (CVE-2025-36911) que afecta el protocolo Fast Pair de Google.
Una herramienta práctica para comprobar si los dispositivos Google Fast Pair son vulnerables a ataques de emparejamiento, vinculación de cuentas y de nivel de protocolo.
Este repositorio proporciona el arsenal de pruebas WhisperPair, una herramienta para evaluar la seguridad de los dispositivos Google Fast Pair. Está diseñada tanto para investigadores como para profesionales, con el fin de reproducir nuestros hallazgos y probar sus propios dispositivos.
Para obtener una visión general del proyecto, los dispositivos afectados y contexto adicional, visite nuestro sitio web.
Este repositorio también contiene el artefacto para el artículo «One Tap to Hijack Them All: A Security Analysis of the Google Fast Pair Protocol», presentado en IEEE S&P 2026.
La versión completa del artículo se puede encontrar aquí. Si encuentra útil este trabajo, considere citar el artículo:
@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},
}
Los materiales se proporcionan para permitir la reproducibilidad de nuestra evaluación y ayudar a los investigadores a realizar pruebas defensivas. Utilice estos materiales solo para investigación de seguridad autorizada y verificación defensiva en dispositivos que posea o tenga permiso explícito para probar. Dado que el código en este repositorio demuestra vulnerabilidades en accesorios de consumo, no lo utilice para atacar dispositivos de terceros sin un permiso escrito claro. Los autores realizaron todos los experimentos en dispositivos propiedad del equipo del proyecto o donados con consentimiento informado. Al ejecutar estas herramientas, acepta utilizarlas únicamente para investigación defensiva, reproducción de nuestros resultados o autoevaluación de dispositivos.
[!NOTE] Resumen: asegúrese de tener una máquina Linux con un adaptador Bluetooth, y que Node.js (LTS) y pnpm estén instalados.
Puede ejecutar tanto la interfaz de usuario como el servidor en la misma máquina ejecutandobash build.shseguido debash start.sh.
Este repositorio contiene un arsenal de pruebas para evaluar si un dispositivo objetivo implementa correctamente ciertos requisitos de seguridad de Google Fast Pair. El arsenal puede comprobar si el predicado de estado de emparejamiento se implementa correctamente, si los mensajes con nonces reutilizados se rechazan y si el dispositivo es vulnerable a un ataque de curva inválida. El arsenal consta de un servidor backend y una interfaz web frontend.
[!NOTE] Si busca la implementación de los ataques específicamente:
./toolkit-server/src/fast-pair-service.tsy./toolkit-server/src/protocol.tscontienen la implementación de los ataques y el protocolo Fast Pair.
El conjunto de herramientas consta de dos componentes: el servidor y la interfaz de usuario.
El servidor debe ejecutarse en un sistema Linux y se ha probado con una Raspberry Pi 4.
La interfaz de usuario es un frontend Next.js que se puede utilizar para controlar el servidor y puede ejecutarse en cualquier lugar donde Node.js sea compatible.
La interfaz de usuario debe poder conectarse al servidor a través de la red.
Probamos el arsenal con Raspberry Pi OS Lite (64 bits) (6.12.47+rpt-rpi-v8), BlueZ versión 5.82.
Una máquina Linux con BlueZ, Node.js y pnpm instalados.
Recomendamos encarecidamente usar la versión actual de soporte a largo plazo (LTS) de Node.js (v24.14.0).
Nos hemos asegurado de que el conjunto de herramientas funcione con esta versión.
Las versiones anteriores pueden funcionar hasta v18, pero las versiones más antiguas probablemente fallarán o producirán resultados inesperados.
nvm.shSi usa nvm para administrar las versiones de Node.js instaladas, debe asegurarse de que root también tenga acceso a la versión de Node.js administrada por nvm.
Como se explica en esta publicación de StackOverflow, es posible que necesite crear un nuevo enlace simbólico.
# Fuente - https://stackoverflow.com/a/40078875
# Publicado por SimpleJ, modificado por la comunidad. Consulte la 'Línea de tiempo' de la publicación para ver el historial de cambios
# Recuperado el 30-03-2026, Licencia - 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] Para ejecutar el servidor, solo necesita enlazar
node.
Si Node.js también está instalado mediante un gestor de paquetes externo, la versión disponible para sudo puede ser diferente de la que usa nvm.
Puede comprobarlo comparando la salida de node -v y sudo node -v.
Si bien recomendamos Node.js LTS v24, el servidor debería funcionar correctamente hasta v18.
pnpmSi Node.js v24 LTS está instalado, debería poder habilitar pnpm usando el siguiente comando:
corepack enable
El arsenal también requiere hcitool y l2ping.
Dependiendo de su distribución de Linux, hcitool podría no estar disponible. Es posible que tenga que instalar bluez-deprecated-tools.
Permanecen preinstalados en la última versión de Raspberry Pi OS Lite en el momento de escribir esto. (1 de octubre de 2025)
Si el adaptador Bluetooth no está encendido, el servidor intentará usar rfkill para encenderlo.
Probar la extensión Audio Switch requiere rfcomm.
[!NOTE] El servidor comprobará la disponibilidad de estas herramientas al iniciarse. En la consola se mostrará información adicional sobre las funciones que pueden no estar disponibles.
Reproducir los resultados requiere acceso físico a un dispositivo vulnerable.
Tenga en cuenta que la mayoría de los fabricantes han publicado actualizaciones de software para WhisperPair, por lo que es posible que necesite dispositivos con firmware desactualizado.
Consulte Selección de un dispositivo para obtener más información sobre los dispositivos que utilizamos en nuestra evaluación.
Si desea ejecutar la interfaz de usuario y el servidor en la misma máquina (Linux), puede usar los scripts build.sh y start.sh.
Primero, instale las dependencias requeridas y compile los componentes usando:
bash build.sh
Asegúrese de que Bluetooth esté habilitado:
sudo rfkill unblock bluetooth
Luego, ejecute la interfaz de usuario y el servidor usando:
bash start.sh
La interfaz de usuario ahora debería estar accesible en http://localhost:3000.
Puede ejecutar la interfaz de usuario y el servidor en diferentes equipos.
Esto le permite ejecutar el servidor en una máquina Linux, mientras que la interfaz de usuario se ejecuta localmente.
Aunque esto no es recomendable, puede hacerlo de la siguiente manera:
toolkit-server esté disponible en la máquina Linuxtoolkit-server ejecutando bash build.sh.env en el directorio toolkit-ui para que la variable SERVER_URL esté configurada con la URL del servidor.
Puede ejecutar bash update_server_url.sh <SU_URL> para actualizar el archivo .env automáticamente.toolkit-ui ejecutando bash build.shtoolkit-server ejecutando bash start.shtoolkit-ui ejecutando bash start.shLa interfaz de usuario ahora debería estar accesible en http://localhost:3000.
Como alternativa al uso de los scripts build.sh y start.sh, también puede compilar e iniciar el servidor manualmente.
Las instrucciones detalladas sobre cómo realizar estos pasos se encuentran en el README de toolkit-server
Como alternativa al uso de los scripts build.sh y start.sh, también puede compilar e iniciar la interfaz de usuario manualmente.
Las instrucciones detalladas sobre cómo realizar estos pasos se encuentran en el README de toolkit-ui
Necesita tener un accesorio compatible con Fast Pair para realizar los ataques y usar el conjunto de herramientas.
Evaluamos 25 dispositivos de 16 fabricantes, que se muestran en la tabla a continuación.
Si tiene uno de esos dispositivos y su firmware no se ha actualizado desde septiembre de 2025, puede reproducir nuestros resultados.
También puede usar el conjunto de herramientas para evaluar un dispositivo que no probamos.
Sin embargo, puede encontrar algunos errores inesperados según la confiabilidad del chipset Bluetooth del dispositivo objetivo.
Al realizar los ataques, asegúrese de saber si el dispositivo objetivo está en modo de emparejamiento o no.
Algunos ataques requieren que el dispositivo no esté en modo de emparejamiento y pueden producir falsos positivos de lo contrario.
Otros ataques requieren que el dispositivo esté en modo de emparejamiento y pueden no funcionar de lo contrario.
Si busca dispositivos compatibles con Fast Pair, puede usar la lista de Model IDs para ver todos los dispositivos certificados con Fast Pair.
La interfaz de usuario mostrará un mensaje de advertencia si ha seleccionado un dispositivo que no estaba incluido en nuestro conjunto de pruebas.
Este mensaje se muestra según el Model ID, que puede variar entre diferentes colores y regiones para el mismo dispositivo.
Por ejemplo, unos auriculares Sony WH-1000XM6 azules usan un Model ID diferente que unos auriculares Sony WH-1000XM6 negros.
Dado que es probable que estos dispositivos tengan el mismo firmware (aunque sus Model IDs sean diferentes), puede ignorar este mensaje de advertencia de manera segura.
Debido a una limitación de velocidad más estricta impuesta por la API gRPC de Fast Pair, algunas solicitudes de datos de modelo pueden devolver respuestas exitosas con cuerpos vacíos.
Esto hará que la interfaz de usuario muestre «No device with Model ID <número> was found».
Si está seguro de que el Model ID que ingresó existe, espere unos minutos y vuelva a intentarlo.
[!NOTE] Los datos de modelo para los dispositivos en nuestro conjunto de pruebas están incluidos en este repositorio y se leerán desde una caché. Evaluar estos dispositivos no requiere una llamada a la API al servicio gRPC. Tenga en cuenta que los dispositivos de la misma serie pueden no tener los mismos Model IDs. Consulte Mensaje de advertencia de modelo no incluido en el conjunto de pruebas para obtener más información.

La interfaz de usuario intentará conectarse al servidor al iniciarse.
Cuando la conexión sea exitosa, se mostrará un mensaje «Connected to the server» en la esquina inferior derecha de la pantalla.
Evaluar si un dispositivo es vulnerable requiere tres pasos: descubrir el dispositivo, configurar su Model ID y ejecutar un ataque.
El arsenal escanea continuamente en busca de dispositivos Bluetooth de baja energía, que se muestran en el lado izquierdo de la pantalla. Los dispositivos que anuncian datos de Fast Pair se muestran en la parte superior. Los detalles del dispositivo se muestran en el lado derecho de la pantalla después de hacer clic en «Select» en un dispositivo.
Ejecutar las pruebas descritas en el artículo requiere que se configure un Model ID para un dispositivo. Si el dispositivo expone la característica GATT de Fast Pair, se mostrará un botón «Read Model ID» en los detalles del dispositivo. Al hacer clic en este botón se intentará leer el Model ID.
Tenga en cuenta que muchos dispositivos no implementan correctamente esta característica y devuelven Model IDs inválidos. Alternativamente, puede configurar manualmente el Model ID del dispositivo presionando el botón «Set Model ID» e ingresando un valor manualmente. Se pueden seleccionar los dispositivos que se evaluaron durante nuestras pruebas, o se puede ingresar un valor personalizado. En la raíz de este repositorio se incluye una lista completa de dispositivos compatibles con Fast Pair.
Una vez que se haya configurado un Model ID, los metadatos sobre el dispositivo se mostrarán en los detalles del dispositivo.
Para ejecutar un ataque, haga clic en el botón «Attack» en el panel de detalles del dispositivo. Hay tres ataques implementados: verificación del predicado de estado de emparejamiento, reutilización de nonce y ataque de curva inválida. Si ya está conectado a un dispositivo, marcar la casilla «Reconnect» desconectará y reconectará el dispositivo antes de realizar el ataque.
La verificación del predicado de estado de emparejamiento ofrece algunas opciones de configuración adicionales:
Mientras un ataque está en progreso, los registros se mostrarán en tiempo real en la interfaz de usuario. Una vez completado el ataque, se mostrará su duración.
A veces, un ataque o emparejamiento puede llevar más tiempo del esperado.
Puede cancelar un ataque o emparejamiento haciendo clic en el botón «Cancel» en el diálogo correspondiente.
Si recargó la interfaz de usuario durante un ataque o emparejamiento, puede usar el administrador de tareas para cancelar en su lugar.
En la esquina superior derecha de la pantalla, el segundo botón desde la derecha mostrará el estado de la tarea. Si no hay tareas activas, mostrará «No active tasks». De lo contrario, dirá «Task in progress». Para cancelar una tarea, haga clic en el botón «Task in progress», luego presione el botón «Cancel».
Si el servidor se bloquea debido a una tarea pendiente que no se puede cancelar, intente restablecer el adaptador Bluetooth.
[!NOTE] Las tareas pueden tardar hasta 20 segundos en cancelarse.
En algunos casos, el adaptador Bluetooth puede «quedarse atascado» en un «mal estado». La solución más sencilla a este problema es restablecer el adaptador Bluetooth. Para realizar un restablecimiento, abra el menú de solución de problemas presionando el ícono de llave inglesa en la esquina superior derecha de la pantalla. Luego, seleccione «Reset BLE adapter» y confirme el restablecimiento haciendo clic en «Reset» en el diálogo.
Si se produce un error fatal y el servidor debe cerrarse, el script start.sh reiniciará automáticamente el servidor.
En escenarios con muchos dispositivos BLE cercanos, el servidor puede cerrarse inesperadamente debido a un error de D-Bus.
Esto ocurre muy raramente, y el script ./start.sh debería reiniciar automáticamente el servidor si esto sucede.
Si busca dispositivos compatibles con Fast Pair, puede usar la lista de Model IDs para ver todos los dispositivos certificados con Fast Pair.
Este trabajo fue apoyado por el Gobierno Flamenco a través del Programa de Investigación en Ciberseguridad con el número de subvención VOEWICS02.
| Fabricante | Nombre del dispositivo | Model ID | Vulnerable al secuestro | Tiempo hasta el secuestro (s) | Vulnerable a reutilización de nonce | Vulnerable a ataque de curva inválida |
|---|
| Apple | Beats Solo Buds | 6980580 | No | Sí | No | |
| Pixel Buds Pro 2 | 12934265 | Sí | 6.89 | No | No | |
| Jabra | Elite 8 Active | 3778746 | Sí | 32.01 | No | No |
| JBL | Tune Beam | 3293323 | Sí | 6.91 | Solo en la misma sesión | No |
| Marshall | MOTIF II A.N.C. | 15473012 | Sí | 9.49 | Sí | No |
| Nothing | Ear (a) | 8625818 | Sí | 38.80 | Solo en la misma sesión | No |
| OnePlus | Nord Buds Pro 3 | 13394952 | Sí | 10.19 | Solo en la misma sesión | No |
| HP | Poly VFree 60 | 15984097 | No | No | No | |
| Redmi | Buds 5 Pro | 11155060 | Sí | 8.32 | Solo en la misma sesión | No |
| Soundcore | Liberty 4 NC | 5409858 | Sí | 15.27 | Sí | No |
| Sony | WF-1000XM5 | 12499626 | Sí | 9.43 | Sí | No |
| Audio-Technica | ATH-M20xBT | 13285048 | No | Solo en la misma sesión | No | |
| Bose | QuietComfort Ultra | 5723549 | No | No | No | |
| JBL | Live 775 NC | 14502233 | Sí | 7.62 | Solo en la misma sesión | No |
| Marshall | Major V | 12915160 | Sí | 11.70 | Solo en la misma sesión | No |
| Sonos | Ace V | 7340495 | No | No | No | |
| Sony | WH-1000XM4 | 13386638 | Sí | 9.69 | Sí | No |
| Sony | WH-1000XM5 | 13911719 | Sí | 12.38 | Sí | No |
| Sony | WH-1000XM6 | 6360443 | Sí | 12.94 | Solo en la misma sesión | No |
| Sony | WH-CH720N | 16003068 | Sí | 7.46 | Sí | No |
| Bang & Olufsen | Beosound A1 | 2431472 | No | No | No | |
| Jabra | Speak2 55 UC | 9888885 | No | No | No | |
| JBL | Clip 5 | 1917389 | Sí | 36.19 | Sí | No |
| JBL | Flip 6 | 7278954 | No | No | No | |
| Logitech | Wonderboom 4 | 11575855 | Sí | 11.96 | Solo en la misma sesión | No |