
A implementação oficial de referência e verificação de vulnerabilidade do nosso ataque WhisperPair (CVE-2025-36911), que afeta o protocolo Fast Pair da Google.
Uma ferramenta prática para testar se dispositivos Google Fast Pair são vulneráveis a ataques de emparelhamento, vinculação de conta e ao nível do protocolo.
Este repositório fornece o harness de testes WhisperPair, uma ferramenta para avaliar a segurança de dispositivos Google Fast Pair. Foi concebido tanto para investigadores como para profissionais, permitindo reproduzir as nossas descobertas e testar os seus próprios dispositivos.
Para uma visão geral do projeto, dispositivos afetados e contexto adicional, visite o nosso site.
Este repositório contém também o artefacto do artigo One Tap to Hijack Them All: A Security Analysis of the Google Fast Pair Protocol, apresentado na .
A versão completa do artigo pode ser encontrada aqui. Se considerar este trabalho útil, agradecemos que cite o artigo:
@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},
}
Os materiais são fornecidos para permitir a reprodutibilidade da nossa avaliação e para auxiliar investigadores na realização de testes defensivos. Utilize estes materiais apenas para investigação de segurança autorizada e verificação defensiva em dispositivos que possua ou para os quais tenha permissão explícita de teste. Como o código neste repositório demonstra vulnerabilidades em acessórios de consumo, não o utilize para atacar dispositivos de terceiros sem autorização escrita clara. Os autores realizaram todas as experiências em dispositivos pertencentes à equipa do projeto ou doados com consentimento informado. Ao executar estas ferramentas, concorda em utilizá-las apenas para investigação defensiva, reprodução dos nossos resultados ou autoteste de dispositivos.
[!NOTE] Resumo: certifique-se de que tem uma máquina Linux com um adaptador Bluetooth e que o Node.js (LTS) e o pnpm estão instalados.
Pode executar a interface e o servidor na mesma máquina executandobash build.shseguido debash start.sh.
Este repositório contém um harness de testes para avaliar se um dispositivo alvo implementa corretamente determinados requisitos de segurança do Google Fast Pair. O harness pode testar se o predicado de estado de emparelhamento está corretamente implementado, se mensagens com nonces reutilizados são rejeitadas e se o dispositivo é vulnerável a um ataque de curva inválida. O harness é composto por um servidor backend e uma interface web frontend.
[!NOTE] Se procura a implementação específica dos ataques:
./toolkit-server/src/fast-pair-service.tse./toolkit-server/src/protocol.tscontêm a implementação dos ataques e do protocolo Fast Pair.
O toolkit é composto por dois componentes: o servidor e a interface.
O servidor tem de ser executado num sistema Linux e foi testado com um Raspberry Pi 4.
A interface é um frontend Next.js que pode ser usado para controlar o servidor e pode ser executado em qualquer sítio onde o Node.js seja suportado.
A interface tem de conseguir ligar-se ao servidor através da rede.
Testámos o harness com Raspberry Pi OS Lite (64 bits) (6.12.47+rpt-rpi-v8), BlueZ versão 5.82.
Recomendamos vivamente a utilização da versão atual de Suporte de Longo Prazo (LTS) do Node.js (v24.14.0).
Garantimos que o toolkit funciona com esta versão.
Versões mais antigas podem funcionar até à v18, mas é provável que versões mais antigas falhem ou produzam resultados inesperados.
nvm.shSe utiliza nvm para gerir as suas versões do Node.js, tem de se certificar de que o utilizador root também tem acesso à versão do Node.js gerida pelo nvm.
Conforme explicado em esta publicação no StackOverflow, poderá ter de criar uma nova ligação simbólica.
# Source - https://stackoverflow.com/a/40078875
# Posted by SimpleJ, modified by community. See post 'Timeline' for change history
# Retrieved 2026-03-30, License - 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 executar o servidor, só precisa de criar a ligação para
node.
Se o Node.js também estiver instalado através de um gestor de pacotes externo, a versão disponível para sudo pode ser diferente da utilizada pelo nvm.
Pode verificar isto comparando o resultado de node -v e sudo node -v.
Embora recomendemos o Node.js LTS v24, o servidor deve funcionar corretamente até à v18.
pnpmSe o Node.js v24 LTS estiver instalado, deverá conseguir ativar o pnpm com o seguinte comando:
corepack enable
O harness também requer hcitool e l2ping.
Dependendo da sua distribuição Linux, o hcitool pode não estar disponível. Poderá ter de instalar o bluez-deprecated-tools.
Na versão mais recente do Raspberry Pi OS Lite à data de escrita, continua pré-instalado. (1 de outubro de 2025)
Se o adaptador Bluetooth não estiver ligado, o servidor tentará utilizar o rfkill para o ativar.
Testar a extensão Audio Switch requer o rfcomm.
[!NOTE] O servidor verificará a disponibilidade destas ferramentas no arranque. Informações adicionais sobre funcionalidades que possam não estar disponíveis serão apresentadas na consola.
Reproduzir os resultados requer acesso físico a um dispositivo vulnerável.
Tenha em atenção que a maioria dos fabricantes já lançou atualizações de software para o WhisperPair, pelo que poderá necessitar de dispositivos com firmware desatualizado.
Consulte Selecionar um dispositivo para obter mais informações sobre os dispositivos que utilizámos na nossa avaliação.
Se pretender executar a interface e o servidor na mesma máquina (Linux), pode utilizar os scripts build.sh e start.sh.
Primeiro, instale as dependências necessárias e compile os componentes com:
bash build.sh
Certifique-se de que o Bluetooth está ativado:
sudo rfkill unblock bluetooth
Em seguida, execute a interface e o servidor com:
bash start.sh
A interface deverá estar agora acessível em http://localhost:3000.
Pode executar a interface e o servidor em anfitriões diferentes.
Isto permite-lhe executar o servidor numa máquina Linux enquanto a interface é executada localmente.
Embora não seja recomendado, pode fazê-lo da seguinte forma:
toolkit-server está disponível na máquina Linuxtoolkit-server executando bash build.sh.env no diretório toolkit-ui para que a variável SERVER_URL aponte para o URL do servidor.
Pode executar bash update_server_url.sh <YOUR_URL> para atualizar o ficheiro .env automaticamente.toolkit-ui executando bash build.shtoolkit-server executando bash start.shtoolkit-ui executando bash start.shA interface deverá estar agora acessível em http://localhost:3000.
Como alternativa aos scripts build.sh e start.sh, também pode compilar e iniciar o servidor manualmente.
Instruções detalhadas sobre como executar estes passos encontram-se no README do toolkit-server
Como alternativa aos scripts build.sh e start.sh, também pode compilar e iniciar a interface manualmente.
Instruções detalhadas sobre como executar estes passos encontram-se no README do toolkit-ui
Precisa de ter um acessório compatível com Fast Pair para executar os ataques e utilizar o toolkit.
Avaliámos 25 dispositivos de 16 fabricantes, apresentados na tabela abaixo.
Se possuir um desses dispositivos e o firmware não tiver sido atualizado desde setembro de 2025, poderá reproduzir os nossos resultados.
Também pode utilizar o toolkit para avaliar um dispositivo que não testámos.
No entanto, poderá encontrar alguns erros inesperados dependendo da fiabilidade do chipset Bluetooth do dispositivo alvo.
Ao executar os ataques, certifique-se de que sabe se o dispositivo alvo está ou não em modo de emparelhamento.
Alguns ataques exigem que o dispositivo não esteja em modo de emparelhamento e podem produzir falsos positivos caso contrário.
Outros ataques exigem que o dispositivo esteja em modo de emparelhamento e podem não funcionar caso contrário.
Se procura dispositivos compatíveis com Fast Pair, pode utilizar a lista de Model IDs para ver todos os dispositivos certificados Fast Pair.
Model not included in test setA interface apresentará uma mensagem de aviso se selecionar um dispositivo que não foi incluído no nosso conjunto de testes.
Esta mensagem é apresentada com base no Model ID, que pode variar entre cores e regiões do mesmo dispositivo.
Por exemplo, uns auscultadores Sony WH-1000XM6 azuis utilizam um Model ID diferente do de uns Sony WH-1000XM6 pretos.
Como é provável que estes dispositivos tenham o mesmo firmware (mesmo que os Model IDs sejam diferentes), pode ignorar esta mensagem de aviso com segurança.
No device with Model ID <number> was foundDevido a limites de taxa mais rigorosos impostos pela API gRPC do Fast Pair, alguns pedidos de dados do modelo podem devolver respostas bem-sucedidas com corpo vazio.
Isto fará com que a interface apresente No device with Model ID <number> was found.
Se tiver a certeza de que o Model ID que introduziu existe, aguarde alguns minutos e tente novamente.
[!NOTE] Os dados dos modelos dos dispositivos do nosso conjunto de testes estão incluídos neste repositório e serão lidos a partir de uma cache. Avaliar estes dispositivos não requer uma chamada à API do serviço gRPC. Tenha em atenção que dispositivos da mesma série podem não ter os mesmos Model IDs. Consulte Mensagem de aviso Model not included in test set para obter mais informações.

A interface tentará ligar-se ao servidor no arranque.
Quando a ligação for bem-sucedida, será apresentada a mensagem "Connected to the server" no canto inferior direito do ecrã.
Avaliar se um dispositivo é vulnerável requer três passos: descobrir o dispositivo, definir o seu Model ID e executar um ataque.
O harness pesquisa continuamente por dispositivos Bluetooth Low Energy, que são apresentados no lado esquerdo do ecrã. Os dispositivos que anunciam dados Fast Pair são mostrados no topo. Os detalhes do dispositivo são mostrados no lado direito do ecrã depois de clicar em "Select" num dispositivo.
Executar os testes descritos no artigo requer que seja definido um Model ID para um dispositivo. Se o dispositivo expuser a característica GATT do Fast Pair, será apresentado um botão "Read Model ID" nos detalhes do dispositivo. Clicar neste botão tentará ler o Model ID.
Tenha em atenção que muitos dispositivos não implementam corretamente esta característica, devolvendo Model IDs inválidos. Em alternativa, pode definir manualmente o Model ID do dispositivo pressionando o botão "Set Model ID" e introduzindo um valor manualmente. É possível selecionar dispositivos que foram avaliados durante os nossos testes ou introduzir um valor personalizado. Uma lista completa de dispositivos compatíveis com Fast Pair está incluída na raiz deste repositório.
Depois de definir um Model ID, os metadados sobre o dispositivo serão apresentados nos detalhes do dispositivo.
Para executar um ataque, clique no botão "Attack" no painel de detalhes do dispositivo. Existem três ataques implementados: aplicação do predicado de estado de emparelhamento, reutilização de nonce e ataque de curva inválida. Se já estiver ligado a um dispositivo, marcar a caixa "Reconnect" irá desligar e voltar a ligar ao dispositivo antes de executar o ataque.
A verificação da aplicação do predicado de estado de emparelhamento oferece algumas opções de configuração adicionais:
Enquanto um ataque está em curso, os registos serão apresentados em tempo real na interface. Após a conclusão do ataque, a sua duração será apresentada.
Por vezes, um ataque ou emparelhamento pode demorar mais tempo do que o esperado.
Pode cancelar um ataque ou emparelhamento clicando no botão "Cancel" na caixa de diálogo correspondente.
Se recarregou a interface durante um ataque ou emparelhamento, pode utilizar o gestor de tarefas para cancelar.
No canto superior direito do ecrã, o segundo botão a partir da direita apresenta o estado das tarefas. Se não houver tarefas ativas, apresentará "No active tasks". Caso contrário, apresentará "Task in progress". Para cancelar uma tarefa, clique no botão "Task in progress" e, em seguida, prima o botão "Cancel".
Se o servidor ficar bloqueado devido a uma tarefa pendente que não pode ser cancelada, tente redefinir o adaptador Bluetooth.
[!NOTE] As tarefas podem demorar até 20 segundos a cancelar.
Em alguns casos, o adaptador Bluetooth pode ficar "preso" num "estado inválido". A solução mais simples para este problema é redefinir o adaptador Bluetooth. Para efetuar uma reposição, abra o menu de resolução de problemas pressionando o ícone de chave inglesa no canto superior direito do ecrã. Em seguida, selecione "Reset BLE adapter" e confirme a reposição clicando em "Reset" na caixa de diálogo.
Se ocorrer um erro fatal e o servidor tiver de ser encerrado, o script start.sh reiniciará automaticamente o servidor.
Em cenários com muitos dispositivos BLE próximos, o servidor pode encerrar inesperadamente devido a um erro D-Bus.
Isto acontece muito raramente e o script ./start.sh deverá reiniciar automaticamente o servidor se tal acontecer.
| Fabricante | Nome do dispositivo | Model ID | Vulnerável a sequestro | Tempo até sequestro (s) | Vulnerável a reutilização de nonce | Vulnerável a ataque de curva inválida |
|---|---|---|---|---|---|---|
| Apple | Beats Solo Buds | 6980580 | Não | Sim | Não | |
| Pixel Buds Pro 2 | 12934265 | Sim | 6.89 | Não | Não | |
| Jabra | Elite 8 Active | 3778746 | Sim | 32.01 | Não | Não |
| JBL | Tune Beam | 3293323 | Sim | 6.91 | Apenas na mesma sessão | Não |
| Marshall | MOTIF II A.N.C. | 15473012 | Sim | 9.49 | Sim | Não |
| Nothing | Ear (a) | 8625818 | Sim | 38.80 | Apenas na mesma sessão | Não |
| OnePlus | Nord Buds Pro 3 | 13394952 | Sim | 10.19 | Apenas na mesma sessão | Não |
| HP | Poly VFree 60 | 15984097 | Não | Não | Não | |
| Redmi | Buds 5 Pro | 11155060 | Sim | 8.32 | Apenas na mesma sessão | Não |
| Soundcore | Liberty 4 NC | 5409858 | Sim | 15.27 | Sim | Não |
| Sony | WF-1000XM5 | 12499626 | Sim | 9.43 | Sim | Não |
| Audio-Technica | ATH-M20xBT | 13285048 | Não | Apenas na mesma sessão | Não | |
| Bose | QuietComfort Ultra | 5723549 | Não | Não | Não | |
| JBL | Live 775 NC | 14502233 | Sim | 7.62 | Apenas na mesma sessão | Não |
| Marshall | Major V | 12915160 | Sim | 11.70 | Apenas na mesma sessão | Não |
| Sonos | Ace V | 7340495 | Não | Não | Não | |
| Sony |
Se procura dispositivos compatíveis com Fast Pair, pode utilizar a lista de Model IDs para ver todos os dispositivos certificados Fast Pair.
Este trabalho foi apoiado pelo Governo Flamengo através do Programa de Investigação em Cibersegurança, com o número de subvenção VOEWICS02.
| WH-1000XM4 |
| 13386638 |
| Sim |
| 9.69 |
| Sim |
| Não |
| Sony | WH-1000XM5 | 13911719 | Sim | 12.38 | Sim | Não |
| Sony | WH-1000XM6 | 6360443 | Sim | 12.94 | Apenas na mesma sessão | Não |
| Sony | WH-CH720N | 16003068 | Sim | 7.46 | Sim | Não |
| Bang & Olufsen | Beosound A1 | 2431472 | Não | Não | Não |
| Jabra | Speak2 55 UC | 9888885 | Não | Não | Não |
| JBL | Clip 5 | 1917389 | Sim | 36.19 | Sim | Não |
| JBL | Flip 6 | 7278954 | Não | Não | Não |
| Logitech | Wonderboom 4 | 11575855 | Sim | 11.96 | Apenas na mesma sessão | Não |