Pixel 10 0-Click Chain: ドライバーの脆弱性から学ぶ教訓
Pixel 10 0-Click Chain: ドライバーの脆弱性から学ぶ教訓
現代のスマートフォンのセキュリティは、ハードウェア抽象化レイヤーとサードパーティ製ドライバーの複雑なネットワークに依存していることが多い。ある領域で脆弱性が修正されると、攻撃者(およびセキュリティ研究者)は、次に開いている窓を探す。これは、Google Project Zeroによる最近の研究でまさに起こったことであり、Pixel 10に対するゼロクリック・エクスプロイト・チェーンの詳細が明らかにされた。
Pixel 9でのエクスプロイト・チェーンの成功に続き、Project ZeroはPixel 10においても同様のルート権限への経路が存在するかどうかを調査した。彼らの調査結果は、厳しい現実を浮き彫りにしている。一部の防御策は改善されたものの、新しいハードウェア・ドライバーにおける重大な見落としが、カーネル脆弱性の「聖杯」を提供してしまったのだ。
第一歩:Dolbyエクスプロイトの更新
このチェーンの最初の侵入ポイントは、以前に発見されたDolbyの脆弱性(CVE-2025-54957)の更新であった。このエクスプロイトをPixel 9からPixel 10へ移植することは、主にメモリ・オフセットの更新が必要なだけであり、比較的容易であった。
しかし、研究者たちは新たな障害に直面した。Pixel 10は-fstack-protectorの代わりにRET PAC (Pointer Authentication Code)を利用している。この変更により、従来の__stack_chk_failを上書きする方法はもはや通用しなくなった。これを回避するため、チームは、デコーダーの初期化中に一度だけ呼び出される初期化コードであるdap_cpdp_initを、システムの機能を損なうことなく上書き可能な実行可能なターゲットとして特定した。
ローカル権限昇格:VPUドライバー
Pixel 9のエクスプロイトはBigWaveドライバーに依存していたが、そのドライバーはPixel 10には存在しなかった。代わりに、研究者たちは、Tensor G5チップ上のChips&Media Wave677DVシリコンで使用される新しいドライバーである/dev/vpuを発見した。
VPUドライバーを監査したところ、Project Zeroは、ドライバーがメモリ・マッピングを処理する方法における重大な欠陥を発見した。古いチップ向けのアップストリームのLinuxドライバーとは異なり、PixelのVPUドライバーは、チップのハードウェア・インターフェースをユーザー空間に直接公開しており、ユーザー空間がチップのMMIO (Memory-Mapped I/O) レジスタ・インターフェースをマッピングすることを可能にしている。
「聖杯」の脆弱性
脆弱性はvpu_mmapハンドラー内に存在する。このコードは、メモリ・マッピングのサイズを実際のレジスタ領域のサイズに制限できていない:
static int vpu_mmap(struct file *fp, struct vm_area_struct *vm)
{
unsigned long pfn;
struct vpu_core *core =
container_of(fp->f_inode->i_cdev, struct vpu_core, cdev);
vm_flags_set(vm, VM_IO | VM_DONTEXPAND | VM_DONTDUMP);
/* This is a CSRs mapping, use pgprot_device */
vm->vm_page_prot = pgprot_device(vm->vm_page_prot);
pfn = core->paddr >> PAGE_SHIFT;
return remap_pfn_range(vm, vm->vm_start, pfn, vm->vm_end-vm->vm_start, vm->vm_page_prot) ? -EAGAIN : 0;
}
mmapシステムコールにおいて、レジスタ領域よりも大きなサイズを指定することで、攻撃者は任意の物理メモリをユーザーランドへマッピングすることができる。カーネル・イメージはVPUレジスタ領域よりも高い物理アドレスに位置しており、かつPixelデバイスではカーネルは常に同じ物理アドレスにあるため、攻撃者は単にオフセットを計算してカーネル関数を上書きすることで、即座にコード実行権限を得ることができる。
Project Zeroは、カーネルへの任意の読み書きアクセスを実現するためにわずか5行のコードが必要であり、フル・エクスプロイトは1日未満で開発されたと指摘している。
トリアージと修正
この研究から得られる肯定的な側面の一つは、Androidの脆弱性トリアージ・プロセスが改善されていることである。VPUのバグは2025年11月24日に報告され、2025年2月のセキュリティ・ブルティンにて修正された。これは、以前のBigWaveのバグ(Pixel 9におけるもの)のように、深刻度が「中程度」としか評価されていなかった同様の深刻度の報告と比較して、大幅に迅速な対応が実現されている。
構造的な欠陥と今後の道筋
迅速なパッチ適用が進んでいる一方で、このバグの存在は構造的な問題を示唆している。VPUドライバーは、BigWaveドライバーを作成したのと同じチームが開発したものである。BigWaveにおける前回の高プロファイルな脆弱性が存在したにもかかわらず、同様の浅いセキュリティ・フローがVPUドライバーに導入されていた。
このことは、技術コミュニティにおいて、より強固な監査を監査の必要性と、オープンソースへのアップストリーム化の役割に関する重要な議論を火種として起こしている。あるコメント主は次のように述べている:
"Frankly, it should be a requirement of Google's certification process that everything regarding drivers regarding drivers gets upstreamed into the Linux kernel. Yes, even if this adds quite a time delay to the البحثajar_development process."
さらに、この発見は、モバイル・セキュリティにおける根強い緊張関係を浮き彫りにしている。AI機能(メッセージを分析するためにメディアを事前デコーディングする必要がある場合が多い)への欲求は、ゼロクリック・エクスプロイトの攻撃対象領域を増やすことにつながる。別の観察者は、次のように指摘している。わずかな利便性の向上との引き換えに、多くの場合、重大なセキュリティ・リスクを伴う。
結論
Pixel 10のエクスプロイト・チェーンは、ハードウェア・レベルのドライバーは、モバイル・セキュリティ・チェーンにおいてしばしば最も弱い環(わ)であるということを思い出させてくれる。トリアージの改善と迅速なパッチ適用は進歩の歩みを示しているが、最終的な目標は、ドライバーがエンドユーザーに届く前に、セキュリティを意識した開発と徹底的な監査が行われることへの、プロアクティブな転換であるはずだ。