
TCL 50C721(RTD1319 / Mali-G31)rootツールキット — 自律型CVE-2022-22706エクスプロイトチェーン
1つの TCL Android TV ファームウェアにおけるテザードルート、SELinux Permissive、広告ブロック、デブロート、自動バックアップのための完全なルートエクスプロイトチェーンとポストルートツールキットです。これはファームウェア固有の研究およびツールであり、汎用的な TCL ルートツールでも、サポート対象のインストーラーでもありません。
| 項目 | 記録された検証ユニット |
|---|---|
| TV | TCL QLED 50C721 / BeyondTV6 |
| ファームウェア | V8-R51MT02-LF1V903、ビルド AR10 |
| Android / カーネル | Android 11 / 4.14.198+ |
| SoC / GPU | Realtek RTD1319 / Mali-G31 (Bifrost, kbase r28p0) |
| ユーザー空間 | 32-bit ARMv7 |
| 報告されたセキュリティパッチ | 2024-03-05 |
| 過去の結果 | uid=0 の ADB シェル、SELinux Permissive |
記録された成功結果があるのは、このモデル/ファームウェアの組み合わせのみです。正確な SoC の識別と Mali ドライバのリビジョンは、元の記録間で一貫していません。詳細は互換性の制限を参照してください。このソースリリースの準備中に、新たなルート化テストは実施されていません。
自律型ルートバイナリ (auto_root.c) は、非特権アプリのコンテキストから 2 秒未満で uid=0 を取得します:
フェーズ 1 — CVE-2022-22706 (Mali GPU ページキャッシュ書き込み): KBASE_IOCTL_MEM_IMPORT を介して、libc.so の __cxa_atexit ページの MAP_SHARED マッピングを GPU ユーザーバッファとしてインポートします。mremap(MREMAP_FIXED) を使用してファイルマッピングを置き換えます。ページキャッシュ内の __cxa_atexit 上に 112 バイトの Thumb-2 シェルコードを書き込みます (ディスク上のファイルは変更されません — dm-verity で保護されています)。
フェーズ 3 — 自然なトリガー: 新しい C++ プロセスはすべて CRT 初期化中に __cxa_atexit() を呼び出し、シェルコードを実行します。特権ドメイン (audioserver、rtkm_scene) が /dev/rtkmem を介して物理ページ 0x1DE7000 をマップし、selinux_state.enforcing = 0 を書き込みます。
フェーズ 4a — 直接的な資格情報の変更: SELinux Permissive の状態で、/dev/rtkmem を介した物理メモリ読み取りによってカーネルの task_struct リンクリストをたどります。comm[] を照合して自プロセスを見つけ、cred 構造体を init_cred からの uid=0 と完全なケイパビリティで上書きします。zygote の BPF seccomp フィルタをバイパスするために TIF_SECCOMP をクリアします。
フェーズ 4b — システムの堅牢化: 広告ブロック用 hosts をバインドマウントし、テレメトリ IP をブロックする iptables ルールを削除し、28 個のブロートウェアパッケージを無効化し、起動時の永続化のために APP_AUTO_START を付与し、シェルコードを非アクティブ化し、SELinux を Enforcing に再設定します。
2 つのスタンドアロンプログラム (root_cve22706.c、libc_rtkmem_patch2.c) は、同じ CVE-2022-22706 ページキャッシュ書き込みプリミティブを個別のテザードルートステージとして実装しており、手動での ADB ルート化やエクスプロイトプリミティブの理解に役立ちます。
scripts/root.sh — ADB 自動化: TV に接続し、両方のスタンドアロンステージを実行し、root と SELinux の状態を検証します。scripts/post_root.sh — 堅牢化後に auto_root から呼び出されるポストルートフック。デバイスの完全バックアップを作成します: サイドロードされた APK、アプリデータ、WiFi 設定、すべての設定、パッケージリスト。最新 5 件のバックアップに自動的に整理されます。APK や再現可能な APK アプリケーションプロジェクトは含まれていません。ここにはインストール一回で自動起動するリリースはありません。自律型ルートバイナリは APK のネイティブコードから呼び出されるように設計されていますが、APK ラッパーはこのリリースには含まれていません。
# Build (requires Android NDK)
cd exploit && make
# Push to TV
adb connect <TV_IP>:5555
adb push bin/auto_root /data/local/tmp/
adb push bin/root_cve22706 /data/local/tmp/
adb push bin/libc_rtkmem_patch2 /data/local/tmp/
# Option A: Run the autonomous chain (includes hardening + backup)
adb shell /data/local/tmp/auto_root
# Option B: Manual two-stage root via script
bash scripts/root.sh <TV_IP>
所有している、または評価を明示的に許可されているハードウェアでのみ使用してください。まずすべての C ファイルとファームウェア固有の前提を確認してください。データを保持し、既知の一致するリカバリイメージと手順を独自に入手してください。ADB を信頼できないネットワークに公開しないでください。再起動すると揮発性のパッチ(page-cache、bind マウント、iptables)は削除されますが、パッケージの無効化と APP_AUTO_START は永続化されます。
このプロジェクトに基づいてパッチ済みの boot イメージや vbmeta イメージをフラッシュしないでください。 過去に 2 回の試行でブートループが発生しました。永続的 root の手法も、普遍的なリカバリの保証も確立されていません。
すべてのオリジナルコードは MIT です。カーネルの抜粋(kernel/mem.c)は GPL-2.0 ライセンスと著作権表示を保持しています。帰属表示とアップストリームの参照については LICENSE と provenance を参照してください。