| # | 判定 | 内容 |
|---|---|---|
| 1 | NG | 01. CVE-2025-48647 - Pixel CPM FWTP input validation |
01. CVE-2025-48647 - Pixel CPM FWTP input validationAndroid / Pixel の脆弱性情報
判定ng。Pixel 10 の CPM firmware 差分と FWTP / tracepoint 関連文字列から、CPM FWTP mailbox / tracepoint IPC handler 周辺の入力検証不備による memory overwrite と推定できる。ただし、 validated.md を表示# CVE-2025-48647 validation ## 判定 ng ## なぜ ng か このCVEは、公開情報だけでは「具体的にどの入力フィールドが、どの検証不足で、どのメモリ領域へ上書きするか」まで確定できませんでした。 Pixel 10 (frankel) の 2025-12 から 2026-01 への CPM firmware 差分は確認でき、FWTP/tracepoint 関連の文字列も同じ CPM blob 内に存在します。しかし、CPM は bootloader 内の binary blob で、シンボルや公開ソースがなく、`cpm_fwtp_msg_handler` の関数境界・メッセージ構造体・修正命令を十分な確度で対応付けられませんでした。 ## 実施したこと 1. Pixel 8 (shiba) の 2025-12 / 2026-01 factory image から bootloader を HTTP range で抽出。 2. Pixel 8 の bootloader が 2025-12 と 2026-01 で同一であることを確認。 3. Pixel 10 (frankel) の 2025-12 / 2026-01 factory image から bootloader を HTTP range で抽出。 4. Pixel 10 の bootloader に差分があることを確認。 5. frankel bootloader 内の FBPK member `target='cpm'` を抽出。 6. CPM blob 内に FWTP / tracepoint / mailbox 関連文字列があることを確認。 7. CPM blob の byte diff、strings diff、Thumb 逆アセンブル候補を作成。 ## 抽出アーティファクト 大きい抽出物は `../binaries/cve-2025-48647/` 配下に保存しました。 - `shiba-2025-12-bootloader.zip` - `shiba-2026-01-bootloader.zip` - `bootloader-shiba-ripcurrent-16.4-14097582.img` - `bootloader-shiba-ripcurrent-16.4-14097582-jan.img` - `frankel-2025-12-bootloader.zip` - `frankel-2026-01-bootloader.zip` - `bootloader-frankel-deepspace-16.4-14378951.img` - `bootloader-frankel-deepspace-16.4-14451019.img` - `frankel-2025-12-cpm.bin` - `frankel-2026-01-cpm.bin` ローカル調査ファイル: - `artifact-hashes.txt` - `frankel-fbpk-inventory.txt` - `frankel-dec-cpm.strings.txt` - `frankel-jan-cpm.strings.txt` - `frankel-cpm-byte-diff-summary.txt` - `frankel-cpm-diff-candidate-disasm.txt` - `range_extract_factory_member.py` ## 確認できた事実 ### Pixel 8 では該当月差分が見えない Pixel 8 shiba の 2025-12 / 2026-01 bootloader はどちらも同じファイル名でした。 - `bootloader-shiba-ripcurrent-16.4-14097582.img` ハッシュも一致しました。したがって、少なくとも shiba の 2026-01 factory image からはこの CVE の firmware patch 差分を追えません。 ### Pixel 10 では bootloader / CPM に差分がある Pixel 10 frankel では bootloader が更新されています。 - 2025-12: `bootloader-frankel-deepspace-16.4-14378951.img` - 2026-01: `bootloader-frankel-deepspace-16.4-14451019.img` FBPK inventory から CPM member を特定しました。 - `target='cpm'` - offset: `0xf7ac00` - size: `0x7c000` 抽出した CPM blob の hash は 2025-12 と 2026-01 で異なります。 ### CPM blob 内に FWTP / tracepoint 関連文字列がある `frankel-2025-12-cpm.bin` と `frankel-2026-01-cpm.bin` の strings から、少なくとも次の文字列が確認できます。 - `FWTP message of size %d too big for mailbox.` - `Failed to get FWTP message CPM address for 0x%016llx.` - `CAP tracepoint buffer overflow` - `Tracepoint Assert` - `MB_FWTP` - tracepoint 関連の file/function 文字列 これは NVD の `cpm_fwtp_msg_handler` / `cpm/google/lib/tracepoint/cpm_fwtp_ipc.c` という説明と整合します。 ## 推定される脆弱性 推定レベルでは、Pixel CPM firmware の FWTP mailbox / tracepoint IPC handler が、外部から渡される FWTP message の size、address、または section 情報を十分に検証せず、CPM 側メモリへ不正な copy / write を行える問題と考えられます。 しかし、現時点では次を確定できていません。 - `cpm_fwtp_msg_handler` の正確な関数範囲 - FWTP message の struct layout - mailbox buffer の正確なサイズ - memory overwrite の copy destination - 2026-01 で追加された exact check - byte diff のうち、どの命令列が CVE-2025-48647 の修正か ## 差分解析メモ `frankel-cpm-byte-diff-summary.txt` には差分範囲をまとめています。 ただし目視した範囲では、明確に「FWTP size check が追加された」と言い切れる関数をまだ抽出できていません。 特に `0x2fxx` 近辺は table / init data のようにも見え、`0x2ccxx` 近辺は boot / image / section 処理に見えます。FWTP handler 本体と断定するには弱いです。 ## 気になる点 - NVD は source file path まで出しているが、該当 path は公開 AOSP には見当たりません。 - `cpm/google/lib/tracepoint/cpm_fwtp_ipc.c` は Google internal または firmware-side source と見られます。 - 2025-12 の Pixel bulletin には近い領域の CVE-2025-36932 があり、こちらも `cpm_tracepoint_handler` の out-of-bounds write とされます。 - 2025-12 と 2026-01 で tracepoint/FWTP 周辺が連続して修正されている可能性があります。 ## 結論 バグバウンティ対象としては Pixel / Google Devices の CPM firmware 問題であり対象です。 ただし、PoC や詳細報告に使える水準の root cause までは到達していません。現時点で書けるのは「Pixel 10 CPM firmware の FWTP/tracepoint IPC 入力検証不備により memory overwrite が起きる可能性があり、2026-01 bootloader 内 CPM blob で修正されたと見られる」までです。 そのため、このフォルダは `ng` としています。 ## 参照 - Pixel bulletin: https://source.android.com/docs/security/bulletin/pixel/2026/2026-01-01 - NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-48647 - Related NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-36932 - Google device CSV mirror: https://storage.googleapis.com/cve-osv-conversion/osv-output/GSD-2025-48647.json | ||
| 2 | OK | 02. CVE-2025-36911 - Fast Pair pairing-state predicate |
02. CVE-2025-36911 - Fast Pair pairing-state predicateAndroid / Pixel の脆弱性情報
具体的な脆弱性・原因・特定根拠
validated.md を表示# CVE-2025-36911 validation
## 判定
ok
## 結論
CVE-2025-36911 の具体的な root cause は、Google Fast Pair Provider が「新規の Key-based Pairing request は Provider が明示的に pairing mode のときだけ処理する」という pairing-state predicate を強制できていないことです。
Fast Pair の initial pairing では、Seeker が anti-spoofing public key を使って encrypted request を送り、Provider が private key で shared secret を作って応答します。本来、request に Public Key field が含まれる initial Key-based Pairing の場合、Provider は最初に pairing mode かどうかを確認し、pairing mode でなければ write を無視して終了しなければなりません。
脆弱な accessory firmware はこの check を落としている、または迂回可能であるため、攻撃者が BLE 範囲内から idle / connected / not-pairing 状態の Provider に Key-based Pairing request を送り、encrypted response を得られます。その後、Bluetooth BR/EDR pairing / passkey / account key write / Find Hub association へ進められる可能性があります。
## 具体的な脆弱性
対象は Fast Pair Provider 側、つまり Pixel Buds 系のような Google Fast Pair accessory firmware 側の pairing state validation です。
攻撃条件は次の通りです。
1. 対象が Google Fast Pair Provider の Bluetooth accessory。
2. Provider が Fast Pair GATT service `0xFE2C` と Key-based Pairing characteristic `FE2C1234-8366-4814-8EB0-01DE32100BEA` を expose している。
3. 攻撃者が BLE 範囲内にいる。
4. Provider が pairing mode ではない。
5. 攻撃者が model ID に対応する anti-spoofing public key を使って Key-based Pairing request を作る。
6. 脆弱な Provider が、本来無視すべき write に encrypted response notification を返す。
7. その後、BR/EDR pairing、passkey、account-key write などに進められる。
正しい実装では、Public Key field を含む initial request は次の形で拒否されるべきです。
```c
if (request_has_public_key) {
if (!provider_is_in_pairing_mode()) {
ignore_write();
return;
}
derive_anti_spoofing_aes_key();
}
```
脆弱な実装は、この `provider_is_in_pairing_mode()` 相当の gate がない、または state transition / connected-state handling で bypass されているものです。
## なぜ information disclosure になるか
WhisperPair の public analysis では、Fast Pair accessory を不正に hijack / associate できることで、Find Hub / location、または accessory の audio path に関わる privacy impact が発生すると整理されています。
NVD でも CVE-2025-36911 は information disclosure とされ、remote proximal / adjacent attacker が user conversation or location information を disclosure できる可能性があると説明されています。
## Android / Pixel bounty との関係
Pixel January 2026 bulletin では、CVE-2025-36911 は次のように分類されています。
- Component: Pixel
- Subcomponent: Bluetooth
- Type: ID
- Severity: Critical
- Android bug ID: A-445196906
Google device CSV / NVD でも CVE source は Google Devices です。
公開情報から見た実際の target は Android phone stack 単体ではなく、Fast Pair Provider accessory firmware です。WhisperPair のデータでは Pixel Buds Pro 2 が vulnerable device として挙げられており、January 2026 Pixel/Google Devices advisory と整合します。
## どこから特定したか
### 1. Google Fast Pair 仕様
Fast Pair 仕様には、Key-based Pairing request に optional Public Key field が含まれる場合、Provider は pairing mode かどうかを先に確認し、pairing mode でなければ write を無視して終了する、という条件が書かれています。
これは単なる推奨ではなく、initial pairing をユーザーの物理的/明示的な intent に結び付ける security boundary です。
### 2. WhisperPair 論文
WhisperPair は、この pairing intent check が実装上抜けると、Fast Pair の cryptographic authentication が成立しても authorization が成立しないことを示しています。
論文の要点は、anti-spoofing key は Provider が正規デバイスであることを示すだけで、ユーザーが今そのデバイスを pairing したいことは示さない、という点です。
### 3. WhisperPair harness
公開 harness には Fast Pair GATT service / Key-based Pairing characteristic を使い、not-pairing 状態の Provider に request を送り、応答の有無で vulnerability を判定する実装があります。
local clone:
- `../binaries/cve-2025-36911/WhisperPair.git`
調査メモ:
- `harness-evidence.md`
### 4. Pixel Buds Pro 2 の vulnerable table
WhisperPair の公開表では Pixel Buds Pro 2 が vulnerable として扱われています。
手元の `harness-evidence.md` では次を記録しています。
- Device: Pixel Buds Pro 2
- Model ID: `12934265`
- Attack category: hijack
- Time to hijack: `6.89s`
### 5. NVD / Pixel bulletin
Pixel bulletin は Google Devices 側の advisory として CVE-2025-36911 を Pixel / Bluetooth / ID / Critical に分類しています。
NVD は key-based pairing の logic error とし、remote proximal / adjacent attacker による information disclosure と説明しています。
## patch diff について
公開 AOSP source の修正差分は確認できませんでした。
これは、対象が phone-side AOSP Bluetooth stack の Java/C++ 実装ではなく、Fast Pair Provider accessory firmware / vendor SDK 側の実装である可能性が高いためです。
そのため、このフォルダでは patch diff ではなく、次の公開根拠で root cause を確定しています。
- Pixel bulletin
- NVD
- Google Fast Pair 仕様
- WhisperPair 論文
- WhisperPair harness
- Pixel Buds Pro 2 vulnerable table
## 修正の形
最低限の修正は、initial Key-based Pairing の Public Key path に pairing mode check を追加し、pairing mode 以外では encrypted response を返さないことです。
より強い修正として、WhisperPair の IntentPair は intent nonce / ownership proof を key derivation に混ぜ、pairing intent がない限り matching session key が成立しない設計を提案しています。
## 気になる点
- NVD は 2026-06-17 の更新で affected product に `Android kernel` を追加していますが、公開技術情報から見る限り、中心は kernel ではなく Fast Pair Provider logic error です。
- Pixel bulletin の `Pixel / Bluetooth` 表記だけを見ると phone-side の Bluetooth stack と誤解しやすいですが、実際には Pixel Buds Pro 2 のような Google Fast Pair accessory firmware が重要な対象です。
- 脆弱性の本質は暗号破壊ではなく、cryptographic authentication と pairing authorization の混同です。
## 参照
- Pixel bulletin: https://source.android.com/docs/security/bulletin/pixel/2026/2026-01-01
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-36911
- WhisperPair: https://whisperpair.com/
- WhisperPair paper: https://whisperpair.com/whisperpair.pdf
- WhisperPair GitHub: https://github.com/francozappa/WhisperPair
- Fast Pair Key-based Pairing: https://developers.google.com/nearby/fast-pair/specifications/service/provider/kbp
- Fast Pair Account Key: https://developers.google.com/nearby/fast-pair/specifications/service/provider/accountkey
- Fast Pair Characteristic: https://developers.google.com/nearby/fast-pair/specifications/characteristics
| ||
該当する項目がありません