9月14日、calif.ioが「OEMpocalypse Now: A Generic Exploitation Strategy from Android untrusted app to root」と題した記事を公開した。この研究では、Androidの非特権アプリ(untrusted_app)からroot権限取得までを、Samsung・Xiaomi・Oppo/OnePlus/Realmeの三大OEMをまたいで単一の戦略で実現する汎用エクスプロイト手法が詳述されている。本記事はあくまで研究内容の紹介を目的としており、エクスプロイトの悪用を推奨するものではない。
ブートローダーがロックされたGalaxy S26 Ultraでのデモ動画も公開されており、セキュリティコミュニティで大きな注目を集めている。これまでのAndroidエクスプロイト研究が「特定チップセット×特定OSバージョン」の組み合わせに縛られがちだったのに対し、この研究はOEMのソフトウェアスタックに着目することで、搭載チップセットに関係なく、そのOEMが出荷する機種全体をカバーできるという設計思想が核心だ。言い換えれば、SnapdragonモデルとExynosモデルが混在するSamsungの製品ラインであっても、一つの戦略で両方をターゲットにできる。
なぜOEMコードを狙うのか
Androidでは、すべてのサードパーティアプリがuntrusted_appと呼ばれるSELinuxドメイン内のサンドボックスで動作する。このサンドボックスからroot権限を奪うアプローチは大きく三種類ある。
- 汎用Linuxカーネルの脆弱性(
io_uring、ネットワークスタック等) - チップセットドライバの脆弱性(GPU、DSP/NPU等)
- OEM固有コードの脆弱性(Samsung、Xiaomi等がAOSPの上に乗せる独自ドライバ・サービス群)
著者はこの三択を「信頼性」「移植性」「普遍性」の三軸で評価している。
| アプローチ | 強み | 弱み |
|---|---|---|
| 汎用Linuxバグ | 原理的には全機種に通じる | ヒープグルーミングや情報リークが必要で、カーネルバージョン・OEM独自パッチ・RAMサイズで挙動が変わりやすい |
| チップセットドライババグ | 物理ページレベルのプリミティブを得やすい | 「チップセット境界」と「OEM境界」は一致しない。Exynos機とSnapdragon機が混在するSamsungでは全ラインをカバーできない |
| OEM固有コード | OEMのソフトウェアスタックに紐付くため、チップセットを問わず同一コンポーネントが存在する | OEMごとにインスタンス化が必要 |
OEM固有コード(One UI、HyperOS、ColorOS等)はチップセットではなくOEMのソフトウェアスタックに紐付く。そのOEMが出荷する機種であればチップセットを問わず同じコンポーネントが存在するため、OEM単位でのカバレッジが実現する。これが著者の選択した戦略だ。
戦略の二段構成
Stage 1:サンドボックス脱出
Androidのアプリ間通信(Binder、Intent、コンテントプロバイダ、ローカルソケット等)は、低特権の呼び出し元が高特権の受信側にリクエストを送る構造になっている。OEMはAOSPの上に大量の独自アプリ・サービス・デーモンを追加しており、それぞれがIPCエンドポイントを持つ。
OEM製IPCハンドラにおける呼び出し元チェックの欠落や、エクスポートされたコンポーネントへの不適切なアクセス制御が「サンドボックス脱出」の起点となる。OEM固有のSELinuxポリシーが対象ドライバを特権ドメインの背後に置いている場合に限り、この初期段階を経由してより高い特権ドメインへ移行する。
Stage 2:ページUAF
ページUAF(Page Use-After-Free)とは、カーネルが物理メモリページを解放した後も、そのページへの参照が生きたまま残るバグだ。UAF(Use-After-Free:解放済みメモリへの不正アクセス)のうち、スラブ(カーネルの小オブジェクト管理単位)レベルではなく物理ページレベルで起きるものを指す。
スラブレベルのUAFとは異なり、ページレベルのプリミティブは物理メモリを直接操作できる。著者によれば、KASLR(カーネルアドレス空間配置ランダム化)、CFI(制御フロー整合性)、スラブハードニングといった現代的な緩和策の影響を受けにくいとされる。
OEM固有のカーネルドライバにこのページUAFを見つけ、適切なコンテキストから到達することで、カーネルバージョンやデバイスモデルに対して安定した物理ページレベルのプリミティブを確保するのがこの戦略の核心だ。
三チェーンの実績
同一戦略を三つのOEMに対してインスタンス化した結果、以下のカバレッジを達成している。
| OEM | カバレッジ |
|---|---|
| Samsung | Galaxy S23〜S26シリーズ、最近のZシリーズを含む全フラッグシップ |
| Xiaomi | ミッドレンジ〜フラッグシップの大部分 |
| Oppo / OnePlus / Realme | 最近のフラッグシップ機 |
※カバレッジの範囲は元記事の記述に基づく。
Galaxy S26 Ultraでのデモ動画はブートローダーがロックされた状態で撮影されており、一般的な「ロック解除済みデバイスでの検証」とは条件が異なる。
攻撃対象となるカーネルアタックサーフェス
untrusted_appから到達できるカーネルアタックサーフェスは、DAC(標準Unixアクセス制御)、SELinux(強制アクセス制御)、seccomp(システムコールフィルタリング)の三層によって大幅に絞り込まれている。
Samsung Galaxy S26ファミリーを例にとると、untrusted_appから到達可能な主な対象は以下の通りだ。
seccompを通過するコアLinuxシステムコール(メモリ管理、VFS、futex、タイマー、Binderなど)- 共有メモリとDMA-BUFヒープノード(グラフィックスやメディアスタック用)
- GPUドライバ(Snapdragonモデルでは
/dev/kgsl-3d0、Exynos/XclipseモデルではDRMレンダーノード) - DSP/NPUインタフェース(チップセット依存)
- OEM固有の追加ノード(OEMのSELinuxポリシーが公開しているもの)
この研究の位置付けと今後
チップセット非依存で複数OEMのフラッグシップラインを単一戦略でカバーするという構造は、既存の公開研究とは方向性が異なる。記事中ではProject Zeroの研究手法が比較対象として言及されており、著者はカーネルバージョン・OEM・デバイスの三軸で安定性を確保するコストを問題視している。
本記事はシリーズ第1回であり、戦略の設計思想と比較を扱っている。各チェーンの技術的詳細は続編で公開予定だ。CVEの開示状況や各OEMの対応については元記事を参照されたい。なお、本研究で報告された脆弱性がパッチ済みかどうかは各OEMのセキュリティ情報を確認することを推奨する。
詳細はOEMpocalypse Now: A Generic Exploitation Strategy from Android untrusted app to rootを参照していただきたい。