
ファームウェア固有の一時的ルートエクスプロイト。Toshiba/Amazon Fire TV(hazel)向けで、CVE-2026-43499を利用します。ARM32 futex-PI UAF、カーネルアドレスリーク、mm_structリクレーム、資格情報パッチを実装し、ADB経由でUID 0を達成します。
Toshiba/Amazon hazel Fire TV プラットフォーム向けの一時ルートエクスプロイト。CVE-2026-43499 に基づいています。
現在のエクスプロイトは以下でテストされています:
| デバイス | Toshiba Fire TV (hazel) |
| Fire OS ビルド | PS7716.5665N |
| カーネル | Linux 4.9.113 |
| 製品モデル | AFTHA004 (C350) |
[!WARNING] このエクスプロイトはファームウェア固有です。カーネルアドレス、構造体オフセット、およびリクレームチェーンの一部は
PS7716.5665N向けに調整されています。移植または再調整を行わずに、現在のビルドを別のファームウェアやデバイスで実行しないでください。
ヒープリクレームに失敗するとパニックが発生し、TV が再起動する可能性があります。ルートは一時的なもので、再起動後は失われます。TV がフリーズした場合は、いつでも電源を入れ直すことができます。
このエクスプロイトは CVE-2026-43499 を使用して、通常の ADB シェル環境から一時的な UID 0 を取得します。
エクスプロイトチェーンには以下が含まれます:
mm_struct クロスキャッシュリクレーム正常に実行された後、エクスプロイトはルートパスに必要なカーネルオブジェクトを維持し、ローカルコマンドデーモンを起動します。
SELinux は Enforcing のままです。ルートデーモンを介して実行されるコマンドは、shell SELinux ドメインと、このファームウェアで利用可能なケーパビリティバウンディングセットを保持します。
hazel_root.c メインエクスプロイト、カーネル読み取り/書き込みステージ、資格情報パッチ、およびルートコマンドクライアント/サーバーhazel_reclaim.h カーネルアドレスリークと mm_struct クロスキャッシュリクレーム以下の例は 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 -o hazel_root \
-pthread
ADB を使用して TV に接続します。
ネットワーク ADB を使用する場合:
adb connect <TV_IP>:5555
エクスプロイトをプッシュします:
adb push hazel_root /data/local/tmp/hazel_root
adb shell chmod 755 /data/local/tmp/hazel_root
クリーンブートから開始します:
adb shell 'cd /data/local/tmp && ./hazel_root'
正常に実行されると、次のような出力で終了します:
[root] uid=0 euid=0 gid=0
[ROOT] uid=0 daemon pid=... socket=@hazel_root
リクレームは確率的です。失敗した試行は、クリーンに失敗するか、パニックを起こして TV が再起動する可能性があります。
TV が再起動した場合は、通常どおり起動させてから再試行してください。
エクスプロイトが成功したら、別のコピーを起動しないでください。一時ルートパスで使用されるカーネルオブジェクトを保持するため、エクスプロイトプロセスを実行したままにしてください。
同じバイナリがルートデーモンのクライアントとして機能します:
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"'
ルートコマンドが成功すると、次のように報告されるはずです:
uid=0(root) gid=0(root) context=u:r:shell:s0
UID 0 は SELinux をバイパスしないことに注意してください。SELinux は Enforcing のままです。
disable_ota.sh をプッシュし、ルートデーモンを介して実行します:
adb push 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 パッケージを両方とも無効化し、保留中のアップデータ状態をクリアし、結果のパッケージマネージャー状態を検証します。TV は再起動しません。
disable_amazon_services.sh は、Arcus リモート設定プロキシ、ADEP アプリケーションブロッキングサービス、自動コンテンツ認識 (ACR)、およびテスト済みの Hazel ファームウェアに存在する専用の Amazon メトリクスパッケージを無効化します。ACR は無効化され、その保存データはクリアされますが、読み取り専用のシステム APK は削除されないため、操作は元に戻せます。このスクリプトは CrashManager や低レベルのロギングパッケージを無効化しないため、エクスプロイトの開発やトラブルシューティング中もカーネルパニックと Dropbox 診断は引き続き利用できます。
スクリプトをプッシュし、ルートデーモンを介して実行します:
adb push 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"'
有効または無効になったパッケージの状態は通常、再起動後も維持されます。パッケージを復元しても、無効化中にクリアされたパッケージデータは復元されません。
TV を再起動します:
adb reboot
エクスプロイトは一時的なカーネル状態のみを変更するため、ルートは再起動後に失われます。
ルートがアクティブな間に永続的な Android 設定やデータに意図的に加えられた変更は、もちろん再起動によって必ずしも元に戻るわけではありません。
現在確認されている唯一のターゲットは次のとおりです:
hazel
PS7716.5665N
Linux 4.9.113
ARM32
他の TV も hazel デバイス名を使用しているように見えますが、コードネームが同じでも、カーネルビルド、ボード、または構造体レイアウトが同じであるとは限りません。
別の 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
現在のソースにハードコードされているカーネルアドレスと構造体オフセットは、ターゲットとなる各ファームウェアで検証する必要があります。
これは、この Fire OS ビルドで使用されているベンダー製 ARM32 Linux 4.9 カーネル向けの CVE-2026-43499 エクスプロイトチェーンのファームウェア固有の適応です。
Hazel 固有の作業には以下が含まれます:
mm_struct SLUB/キャッシュシェーピングしたがって、現在のエクスプロイトは、汎用の CVE-2026-43499 PoC や、任意の Fire TV ファームウェア向けのドロップインエクスプロイトとして扱うべきではありません。
この移植は、以下の公開されている CVE-2026-43499 エクスプロイト実装の研究とアイデアの適応によって開発されました:
gitchw/ghostlock-cve-2026-43499 ARM32 futex-PI UAF リファレンスとウェイター/オーナー/コンシューマーチェーン。
NebuSec/CyberMeowfia IonStack エクスプロイト。より広範な偽造 fops、カーネル読み取り/書き込み、および資格情報パッチ設計を含む。
F-19-F/IonStackQuest3
ARM32 setsockopt(MCAST_JOIN_SOURCE_GROUP) スタックスタンピングと同期のリファレンス。
R0rt1z2/GhostLock-5.10 Hazel 移植の相互チェック中に使用された追加の ARM32 レイアウトとエクスプロイト技術。
開発中に AI コーディングエージェントが使用されました。特に、クラッシュおよび逆アセンブリデータの分析、ターゲット固有のカーネルアドレスと構造体オフセットの特定と相互チェック、デバッグとコードクリーンアップの支援に使用されました。
エクスプロイト自体はターゲットの PS7716.5665N デバイスでテストされ、リリースビルドで使用されるターゲット固有の値はそのファームウェアに対して検証されました。AI の出力は、真実の情報源ではなく研究支援として扱われました。