针对 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已通过硬件测试;较旧的捆绑配置文件基于静态固件分析,仍需要来自匹配电视的报告。不要绕过配置文件匹配,也不要手动将地址复制到不相关的固件上。静态生成的配置文件仍需要在匹配的硬件上确认。
堆回收失败可能导致 panic 并重启电视。Root 是临时的,重启后会丢失。如果你的电视卡死,你始终可以通过断电重启来解决。
该漏洞利用使用 CVE-2026-43499 从普通 ADB shell 环境中获取临时 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 连接到电视。
如果使用网络 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
回收是概率性的。一次不成功的尝试可能会干净地失败,也可能触发 panic 并导致电视重启。
如果电视重启,让它正常启动,然后重试。
一旦漏洞利用成功,不要再启动另一个副本。你可以关闭正在运行的进程,然后继续执行后续命令。
同一个二进制文件同时充当 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 模式。
通过 root 守护进程推送并运行 tools/device_scripts/disable_ota.sh:
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 状态。它不会重启电视。
tools/device_scripts/disable_amazon_services.sh 会禁用 Arcus 远程配置代理、ADEP 应用阻止服务、自动内容识别(ACR),以及受测 Hazel 固件上存在的专用 Amazon 指标软件包。ACR 会被禁用并清除其存储的数据,但其只读系统 APK 不会被删除,因此该操作可逆。该脚本不会禁用 CrashManager 或底层日志记录软件包,因此在开发或排查漏洞利用问题时,内核 panic 和 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"'
重启电视:
adb reboot
该漏洞利用仅修改临时内核状态,因此重启后 root 权限会丢失。
当然,在 root 权限激活期间对持久化 Android 设置或数据所做的有意更改,并不一定会因重启而被还原。
固件归档中当前列出的全部 24 个 Hazel 固件版本,均在 profiles/ 中由配置文件表示,范围从 PS7657.3645N 到 PS7716.5665N。当设备身份匹配时,它们均可被自动选择。
| 固件系列 | 配置文件 | 验证情况 |
|---|---|---|
| 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 使用相同的产品、指纹、增量构建、内核版本和架构,而营销型号则使用通配符。因此,一个 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
要使用已审核的 PS7716 配置文件和固件作为参考,从候选 OTA 创建配置文件:
uv run python profile_creator.py create /path/to/candidate.bin \
--template ../../profiles/hazel-PS7716.5665N-5665.conf \
--reference-firmware /path/to/update-kindle-hazel-tm-PS7716_user_5665.bin \
--output ../../profiles/candidate.conf
创建者会提取 boot.img,解压 ARM 内核,提取 IKCONFIG,对启动组件进行哈希计算,并在编译后的利用路径所使用的每个地址处比较字节。只有当配置、镜像几何结构、关键锚点和整镜像相似度满足严格检查时,它才会克隆地址。否则它会拒绝,并要求进行手动/Ghidra 辅助的移植。
对于存在差异的内核,创建者的 relocate 命令会根据独立定位的地址候选写入一个 static-relocated 配置文件,并在其报告中记录支持性证据。该状态将地址重定位与完整 UAF 和回收路径的硬件验证区分开来。
完整内核 SHA-256 会保留用于溯源,但不会单独用于运行时选择:Amazon 型号构建可能在生成时间戳和构建 ID 上有所不同,同时保留相同的可执行布局。运行时选择使用精确的 Android 构建属性,随后在建立内核读取访问后使用任务列表锚点。
这是针对此 Fire OS 构建所使用的厂商 ARM32 Linux 4.9 内核,对 CVE-2026-43499 利用链进行的固件特定适配。
Hazel 特定的工作包括:
mm_struct SLUB/缓存塑形因此,当前利用不应被视为通用的 CVE-2026-43499 PoC,也不应被视为适用于任意 Fire TV 固件的即插即用利用。
此移植是使用以下公共项目和参考资料开发的:
gitchw/ghostlock-cve-2026-43499 ARM32 futex-PI UAF 参考以及等待者/所有者/消费者链。
NebuSec/CyberMeowfia IonStack 利用,包括更广泛的伪造 fops、内核读/写和凭据修补设计。
F-19-F/IonStackQuest3
ARM32 setsockopt(MCAST_JOIN_SOURCE_GROUP) 栈标记和同步参考。