
GoogleのFast Pairプロトコルに影響を与える攻撃「WhisperPair」(CVE-2025-36911) の公式リファレンス実装および脆弱性検証です。
Google Fast Pair デバイスが、ペアリング、アカウントバインド、およびプロトコルレベルの攻撃に対して脆弱かどうかをテストするための実用的なツールです。
このリポジトリは、Google Fast Pair デバイスのセキュリティを評価するためのツールである WhisperPair テストハーネスを提供します。研究者と実務者の両方が、私たちの調査結果を再現し、自身のデバイスをテストできるように設計されています。
プロジェクトの概要、影響を受けるデバイス、および追加の文脈については、私たちのウェブサイト をご覧ください。
このリポジトリには、IEEE S&P 2026 で発表された論文 One Tap to Hijack Them All: A Security Analysis of the Google Fast Pair Protocol のアーティファクトも含まれています。
論文の完全版はこちらでご覧いただけます。この研究が役に立つと思われた場合は、以下の論文の引用を検討してください:
@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},
}
本マテリアルは、私たちの評価の再現性を確保し、研究者が防御的テストを実施できるようにするために提供されています。これらのマテリアルは、承認されたセキュリティ研究と、所有している、または明示的なテスト許可を得たデバイスに対する防御的検証にのみ使用してください。このリポジトリのコードは民生用アクセサリの脆弱性を実証するものであるため、明確な書面による許可なしに第三者デバイスへの攻撃に使用しないでください。著者らは、プロジェクトチームが所有するデバイス、またはインフォームドコンセントを得て寄贈されたデバイスでのみすべての実験を実施しました。これらのツールを実行することにより、防御的研究、当社の結果の再現、またはデバイスのセルフテストにのみ使用することに同意したものとみなされます。
[!NOTE] 概要: Bluetooth アダプタを搭載した Linux マシンがあり、Node.js (LTS) と pnpm がインストールされていることを確認してください。
同じマシン上で UI とサーバーの両方を実行するには、bash build.shを実行してからbash start.shを実行します。
このリポジトリには、対象デバイスが Google Fast Pair の特定のセキュリティ要件を正しく実装しているかどうかを評価するためのテストハーネスが含まれています。 ハーネスは、ペアリング状態述語が正しく実装されているか、再利用されたナンスを含むメッセージが拒否されるか、デバイスが invalid curve 攻撃に対して脆弱であるかをテストできます。 ハーネスは、バックエンドサーバーとフロントエンド Web UI で構成されています。
[!NOTE] 特に攻撃の実装をお探しの場合は:
./toolkit-server/src/fast-pair-service.tsと./toolkit-server/src/protocol.tsに、攻撃と Fast Pair プロトコルの実装が含まれています。
このツールキットは、サーバー と UI の2つのコンポーネントで構成されています。
サーバーは Linux システム上で実行する必要があり、Raspberry Pi 4 でテストされています。
UI はサーバーを制御するための Next.js フロントエンドで、Node.js がサポートされている場所ならどこでも実行できます。
UI はネットワーク経由でサーバーに接続できる必要があります。
ハーネスは、Raspberry Pi OS Lite (64-bit) (6.12.47+rpt-rpi-v8)、BlueZ バージョン 5.82 でテストしました。
BlueZ、Node.js、pnpm がインストールされた Linux マシン。
Node.js の現在の Long-Term-Support (LTS) バージョン (v24.14.0) を使用することを強くお勧めします。
このバージョンでツールキットが動作することを確認済みです。
古いバージョンでも v18 までは動作する可能性がありますが、それより古いバージョンではクラッシュしたり、予期しない結果が生じる可能性が高くなります。
nvm.shnvm を使用してインストール済みの Node.js バージョンを管理している場合は、root が nvm 管理下の Node.js バージョンにもアクセスできるようにする必要があります。
この StackOverflow の投稿 で説明されているように、新しいシンボリックリンクを作成する必要があるかもしれません。
# 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] サーバーを実行するには、
nodeをリンクするだけで十分です。
Node.js が外部のパッケージマネージャーでもインストールされている場合、sudo で利用できるバージョンが nvm で使用されているバージョンと異なる場合があります。
node -v と sudo node -v の出力を比較することで確認できます。
Node.js LTS v24 を推奨しますが、サーバーは v18 まで正しく機能するはずです。
pnpmNode.js v24 LTS がインストールされている場合は、次のコマンドで pnpm を有効にできるはずです:
corepack enable
ハーネスには hcitool と l2ping も必要です。
Linux ディストリビューションによっては、hcitool が利用できない場合があります。その場合は bluez-deprecated-tools をインストールする必要があるかもしれません。
執筆時点 (2025年10月1日) の最新の Raspberry Pi OS Lite バージョンでは、プレインストールされたままです。
Bluetooth アダプタの電源が入っていない場合、サーバーは rfkill を使用して電源をオンにしようとします。
Audio Switch 拡張機能のテストには rfcomm が必要です。
[!NOTE] サーバーは起動時にこれらのツールが利用可能かどうかをチェックします。 利用できない可能性のある機能に関する追加情報がコンソールに表示されます。
結果を再現するには、脆弱なデバイスへの物理的なアクセスが必要です。
ほとんどのベンダーが WhisperPair 向けのソフトウェアアップデートをリリースしているため、古いファームウェアを搭載したデバイスが必要になる場合があることに注意してください。
評価で使用したデバイスの詳細については、デバイスの選択 を参照してください。
UI とサーバーを同じ (Linux) マシンで実行したい場合は、build.sh と start.sh スクリプトを使用できます。
まず、次のコマンドを使用して必要な依存関係をインストールし、コンポーネントをビルドします:
bash build.sh
Bluetooth が有効になっていることを確認します:
sudo rfkill unblock bluetooth
次に、次のコマンドで UI とサーバーを実行します:
bash start.sh
UI は http://localhost:3000 でアクセスできるはずです。
UI とサーバーを異なるホストで実行できます。
これにより、UI をローカルで実行しながら、サーバーを Linux マシン上で実行できます。
推奨はされませんが、次の手順で実行できます:
toolkit-server ディレクトリが Linux マシン上で利用可能であることを確認しますbash build.sh を実行して toolkit-server をビルドしますtoolkit-ui ディレクトリ内の .env ファイルを更新して、SERVER_URL 変数がサーバーの URL に設定されるようにします。
bash update_server_url.sh <YOUR_URL> を実行すると、.env ファイルを自動的に更新できます。bash build.sh を実行して toolkit-ui をビルドしますbash start.sh を実行して toolkit-server を起動しますbash start.sh を実行して toolkit-ui を起動しますUI は http://localhost:3000 でアクセスできるはずです。
build.sh と start.sh スクリプトを使用する代わりに、サーバーを手動でビルドおよび起動することもできます。
これらの手順の詳細は、toolkit-server README に記載されています。
build.sh と start.sh スクリプトを使用する代わりに、UI を手動でビルドおよび起動することもできます。
これらの手順の詳細は、toolkit-ui README に記載されています。
攻撃を実行してツールキットを使用するには、Fast Pair 互換のアクセサリが必要です。
以下の表に示すように、16社のベンダーから25台のデバイスを評価しました。
これらのデバイスのいずれかを所有しており、2025年9月以降ファームウェアが更新されていない場合は、私たちの結果を再現できます。
私たちがテストしていないデバイスの評価にもツールキットを使用できます。
ただし、対象デバイスの Bluetooth チップセットの信頼性によっては、予期しないエラーが発生する可能性があります。
攻撃を実行する際は、対象デバイスがペアリングモードかどうかを把握していることを確認してください。
一部の攻撃では、デバイスがペアリングモードで ない ことが必要であり、そうでない場合は誤検知が発生する可能性があります。
他の攻撃では、デバイスがペアリングモードであることが必要であり、そうでない場合は機能しない可能性があります。
Fast Pair 互換デバイスを探している場合は、Model ID リスト を使用して、Fast Pair 認定済みのすべてのデバイスを確認できます。
Model not included in test set 警告メッセージテストセットに含まれていないデバイスを選択した場合、UI に警告メッセージが表示されます。
このメッセージは Model ID に基づいて表示され、同じデバイスでも色や地域によって Model ID が異なる場合があります。
例えば、青い Sony WH-1000XM6 ヘッドホンと黒い Sony WH-1000XM6 ヘッドホンでは、異なる Model ID が使用されます。
これらのデバイスは (Model ID が異なっていても) 同じファームウェアを搭載している可能性が高いため、この警告メッセージは安全に無視できます。
No device with Model ID <number> was found エラーメッセージFast Pair gRPC API によって適用されるより厳格なレート制限のため、モデルデータの一部のリクエストが空のボディで成功レスポンスを返す場合があります。
これにより、UI に No device with Model ID <number> was found と表示されます。
入力した Model ID が確かに存在すると思われる場合は、数分待ってから再試行してください。
[!NOTE] テストセットのデバイスのモデルデータはこのリポジトリに含まれており、キャッシュから読み込まれます。 これらのデバイスの評価には、gRPC サービスへの API 呼び出しは必要ありません。 同じシリーズのデバイスでも Model ID が同じとは限らないことに注意してください。詳細については Model not included in test set 警告メッセージ を参照してください。